乐趣区

关于editor:Emacs的avy插件

用 Emacs 的时候,我习惯将它分成“四个局部”

怎么弄的呢?个别是先按 C-x 3 分出左右两个 window,再到各个 window 中用 C-x 2 分出高低两个 window——这不是我的笔误,在 Emacs 的术语中,用来显示一个 buffer 的区域就叫做一个 window。而经常被人们冠名为 window 的、最外层的窗体,则叫做 frame。

这样划分后,屡次按下 C-Tab(我把这个快捷键绑定到了命令other-window 上),便能够依照左上、左下、右上、右下的程序轮换以后聚焦的 window 了。

如果须要从其它 window 中复制内容到以后 window 中粘贴,操作会麻烦一点。以右上角须要左下角的内容为例:

  1. 按三次 C-Tab 换到左下角的 window 中——用快捷键是因为我不想去挪鼠标;
  2. kj高低挪动光标到指标行——用 kj是因为用了 evil-mode 插件(参见这篇文章);
  3. 复制内容,再按一次 C-Tab 回到原来的 window 中粘贴。

听起来可麻烦了。

好在 Emacs 有一个十分好用的插件,能够把第 1 和第 2 个步骤合在一起实现。

avy

这个十分好用的插件就是 avy,它提供的 avy-goto-line 函数能够一步到位地实现下面的第 1 和第 2 个步骤。

用 Emacs 的包管理器就能够装置它

M-x package-install RET avy RET

接着要为命令 avy-goto-line 绑定一个喜爱的快捷键

(global-set-key (kbd "M-g f") 'avy-goto-line)

至此便能够在 Emacs 中欢快地应用 M-g f 来疾速跳转到以后或其它 window 中的行了。百闻不如一见,我来演示一番。

avy-goto-line

家喻户晓,我用 org-mode 来跟踪本人的学习打算,还会将摸索过程中的一些半成品代码保留到 org-mode 的条目中。例如,我想要将左下角的 window 中的三个函数的定义,复制到右上角的代码块中去

于是我先按下 M-g f,让avy 为每一行赋予一个标记

因为心愿切换到左下角的 window 的第一行,所以我先按下j

此时,在前一幅截图中不以字母 j 开始的标记通通隐没了,而以字母 j 开始的标记则只留下了从第二个字符开始的局部。

再按下字母l,就能够将焦点切换到左下角的 window,并且将光标挪动到第一行的行首了。而后只须要选中内容、复制,并返回原来的 window 中粘贴即可。残缺的过程如下

后记

如果在按下组合键 M-g f 后,接着按下的是数字键的话,avy-goto-line会认为使用者打算跳转到指定的行。它将在 Emacs 的 minibuffer 中持续期待输出更多的数字或按下回车。不过我不怎么用这个性能,因为我没有让 Emacs 显示行号,按行号来跳转对我并不不便。

浏览原文

退出移动版