用好 Emacs 中的 register

Emacs 非常的强大, 功能也很多, register 这个东西, 刚接触 emacs 的人的确无从知道它是用来干什么的。

举例来说, 当你在进行复制粘贴操作时, 你复制了某段文字, 这段文字会暂时存储在一个叫 剪切版 的地方。 当你粘贴时, 系统会将内容从剪切版中读取出来, 插入到你要粘贴的地方。 当你重复进行这个操作时, 后一次的复制会将前面复制的内容覆盖掉。 这时, register 就发挥它的强大之处了。

简单的说, register 是一个带有名字的 剪切版。 它有很多个存放你复制内容的区域, 你可以用一个 数字或者字母 给这个区域命名。 我们把这些区域称之为 register 寄存器。 下面是它最简单的一个用法。

  • C-x r s R

保存 SetMark 的(或选中的区域)到 register寄存器 R

  • C-x r i R

读取 register寄存器 R 中的内容插入到当前光标处

简单的说,当你选中一个区域时, 输入 C-x r s 1 , 这时 emacs 会将你选中的区域保存到 寄存器 1 中, 当你需要使用这段内容的时候, 直接输入 C-x r i 1 即可读出这段内容插入到当前光标处。

查看寄存器内容

当你保存了很多个寄存器时, 要用那个的时候,如果忘记了存的是什么内容,是不是很麻烦呢。 当然 emacs 已经提供了一个内置的 function 来解决这个问题。

M-x view-register R

只要输入 寄存器 R 的名字, 就可以显示这个寄存器中存的是什么内容。

还有一个更有用的 function 叫做 list-registers 这个方法会显示出当前 emacs 中的所有缓冲区名字以及内容

M-x list-registers

你可以把它绑定到自己喜欢的快捷键上, 比如

(global-set-key (kbd "C-x r v") 'list-registers)

ps. emacs23 可能需要单独下载 list-register.el 然后 require 这个库, emacs24中已经内置了, 不过结尾多了个 s。

另外 这里之所以绑定到 C-x r v 上 而不是 C-x r l 是因为 C-x r l 默认绑定给了 bookmark-bmenu-list , 实际上 bookmark 在 emacs 中也是一种寄存器。
它也非常简单易用。相比 register寄存器, bookmarks可以持久保存内容到磁盘上, 不会在emacs关闭时丢失内容。更适合做书签使用。

除了上面提到的 可以用register寄存器保存文本之外, emacs 中的 register 寄存器还有一个更加强大的功能, 他能够保存光标位置, 窗口布局, 矩形文本区域等内容。具体可以查阅 emacs文档 关于 registers 的章节。

  • 矩形区域
    C-x r r R
    C-x r i R

    存储, 插入矩形区域的内容到寄存器 R

  • 缓冲区/位置
    C-x r R
    C-x r j R
    记录当前缓冲区及光标位置到寄存器 R, 取出时能够快速跳转回来。

  • 窗口
    C-x r w R
    C-x r j R
    存储当前窗口配置到寄存器 R , 取出时能快速的返回。

  • Frame
    C-x r f R
    C-x r j R
    存储当前的Frame布局, 取出时,返回布局

可以看到当进行取出寄存器操作时, 快捷键有一些是一样的, emacs 会自动根据存入 register寄存器 的内容不同, 自动判断如何返回这个 register寄存器。

posted @ 2012-11-06 15:37  LemonLi  阅读(778)  评论(0编辑  收藏