Emacs的剪贴、复制和粘贴

简介

在一般的编辑器或IDE中,剪贴、复制、粘贴的快捷键通常是Ctrl-X, Ctrl-C, Ctrl-V,这种快捷键方式称之为CUA模式,或许用XCV模式更切贴。而在Emacs中剪贴、复制、粘贴的默认快捷键却是Ctrl-W, Alt-W, Ctrl-V。这一点让刚接触Emacs的人很费解,不好记。其实只要了解一下相关背景就不觉难记了。

历史

  1. CUA标准
    Emacs最早诞生于1976年,这个时候Windows还没出生,也没有CUA或者XCV标准。在Emacs诞生10多年之后,IBM公司制定了CUA标准。不过,IBM在制定CUA标准的时候似乎并没有明文规定把Ctrl-X,Ctrl-C, Ctrl-Y分别作为剪贴、复制、粘贴的快捷键。这种XCV方式的快捷键是谁最早发明的就不好说了,可能跟Apple有关。不过,这套快键键方式确实容易记忆和使用。因此,Microsoft给IBM开发操作系统的时候,在遵守了IBM的这个CUA标准的同时,也使用了这套快捷键方式。后来随着Windows的流行,XCV方式就成了一种流行的标准。只不过以讹传讹,原本不是CUA标准,却被称为CUA了。
  2. Emacs前缀组合键
    另一方面,Emacs这个比流行的标准要古老得多的编辑器,以自己的风格定义了一套快捷键方式。在Emacs中,为了充分利用键盘,设计了大量快捷键,这些快键键通常由前缀组合键和后续组合键组成。如打开文件:先按前缀组合键Ctrl-x,再按后续组合键Ctrl-f;退出:先按前缀组合键Ctrl-x,再按后续组合键Ctrl-c。因此Emacs的前缀组合键在Emacs的地位相当重要,而XCV等位置便利的按键主要被用来做Emacs的前缀组合键了。

设计原理

既然如此,那么一些人可能就想知道Emacs为什么要把Ctrl-W, Alt-W, Ctrl-Y作为剪贴、复制、粘贴的快捷键?它们到底代表了什么含义?

  1. 剪贴
    Emacs把剪贴动作称之为kill(杀死),也称之为wipe out(抹去,干掉),因为剪贴会将一块选择的文本抹去、干掉。Emacs剪贴快捷键Ctrl-W中的W就取自wipe这个单词的首字母。
  2. 复制
    Emacs设计了一种叫kill-ring(kill环)的东西,类似现在大家所熟知的“剪贴板”,被kill的文本都存储在这个kill环中。在Emacs中,复制又叫kill-ring save,也就是指放到kill环中。
  3. 粘贴
    Emacs的粘贴也叫yank。yank这个单词原指动作“急拉“。粘贴快键Ctrl-Y的Y就取自yank这个单词。貌似vi的设计先辈们也很喜欢这个词,但是与Emacs完全相反,yank在vi中表示“复制”。如果没有kill/kill-ring这些概念,从直觉上看,用yank引申出“复制”比“粘贴”更容易让人接受一些。但在Emacs中,有了kill/kill-ring这些概念,用yank引申出“粘贴”反而要合适了。因为,Emacs的粘贴,就是从kill环中取出最近一块被标为kill(杀死)的文本,在光标位置“复活”,有点像起死回生,或将将死之物从死亡线上拉回(yank)的概念。

Emacs中的CUA模式

Emacs虽然默认不使用CUA方式的剪贴、复制和粘贴。但提供了非常方便的CUA模式配置,若想使用CUA模式,直接在Emacs上点击菜单“Options” -> “Use CUA Keys”即可。若想以后默认使用这个模式,再在
“Options ”中点击“Save Options”即可。由于CUA的快键键Ctrl-X,Ctrl-C,Ctrl-V在Emacs中可能是其他快捷键的前缀组合键。设置了CUA模式后,当有文本选择时,Emacs将这些按键组合视为CUA快键键,此时若要将这些按键组合用作前缀组合键,就需要一些额外操作,主要有三种方法:

  1. 快速连按两次前缀组合键(0.2秒内)。可以按住Ctrl键的同时,连按两下相应的X,C或V字母键。
  2. 按前缀组合键时加上Shift键。
  3. 在0.2秒内将前缀组合键和后续组合键快速按完。相比之下,前面两种方式基本无难度,而这个就需要一定的手速了。

后话

剪贴、复制和粘贴是文本编辑中非常重要的操作。入乡随俗,如果要走进Emacs的世界,尽可能多地使用Emacs默认的快捷键设置。如果难以适应,可以调整成常见的CUA模式,但一定要注意设置成CUA模式后对Emacs的前缀组合键的影响。

你可能感兴趣的:(Emacs)