16.7 一些按键绑定

现在来看一些个人按键绑定:

;;; 比较窗口
(global-set-key "\C-cw" 'compare-windows)

compare-windows 是一个巧妙的命令,用于比较当前窗口中的文本与下一个窗口中的文本。它通过从每个窗口的光标位置开始,在每个窗口中移动文本,直到找到不匹配的部分。我经常使用这个命令。

这也展示了如何在所有模式中全局设置按键。

该命令是 global-set-key。它后面跟着按键绑定。在 .emacs 文件中,按键绑定的写法如下:\C-c 代表 Control-C,意味着同时按下 Control 键和 c 键。w 代表按下 w 键。按键绑定用双引号括起来。在文档中,你应该这样写:C-c w。(如果你要绑定一个 META 键,例如 M-c,而不是 CTRL 键,你应该在 .emacs 文件中写成 \M-c。详见 See 重新绑定按键在你的初始化文件中 in GNU Emacs 手册, 获取详细信息。)

由这些按键调用的命令是 compare-windows。注意,compare-windows 前面有一个单引号;否则,Emacs 将首先尝试评估符号以确定其值。

这三个元素,双引号、‘C’ 前面的反斜杠,以及单引号,是我经常忘记的按键绑定的必要部分。幸运的是,我已经记住了应该查看我的现有 .emacs 文件,并适应其中的内容。

至于按键绑定本身:C-c w。这将前缀键 C-c 与一个单字符 w 结合在一起。这组按键,C-c 后跟一个单字符,严格保留供个人使用。 (我称这些为 个人 按键,因为这些是我自己使用的。)你应该始终能够创建这样的按键绑定,而不会覆盖其他人的按键绑定。如果你曾经编写过 Emacs 的扩展,请避免为公共使用占用这些按键。请创建一个类似 C-c C-w 的按键。否则,我们将用完个人按键。

这里是另一个按键绑定,附有注释:

;;; 为 'occur' 绑定按键
; 我经常使用 occur,所以让我们绑定一个按键:
(global-set-key "\C-co" 'occur)

occur 命令显示当前缓冲区中与正则表达式匹配的所有行。当区域处于活动状态时,occur 限制匹配于该区域。否则,它使用整个缓冲区。匹配的行显示在一个名为 *Occur* 的缓冲区中。该缓冲区作为跳转到匹配行的菜单。

以下是如何解绑按键,使其无效:

;;; 解绑 'C-x f'
(global-unset-key "\C-xf")

这解绑的原因是:我发现我在意图输入 C-x C-f 时无意中键入了 C-x f。与其找到一个文件,我无意中设置了填充文本的宽度,几乎总是设置成我不想要的宽度。由于我几乎从不重新设置默认宽度,我简单地解绑了该按键。

以下是如何重新绑定现有按键:

;;; 为 'buffer-menu' 重新绑定 'C-x C-b'
(global-set-key "\C-x\C-b" 'buffer-menu)

默认情况下,C-x C-b 运行 list-buffers 命令。该命令在 另一个 窗口中列出你的缓冲区。由于我几乎总是想在那个窗口中执行某些操作,我更喜欢 buffer-menu 命令,它不仅列出缓冲区,还将光标移到该窗口。