Emacs的avy插件

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

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

这样划分后,屡次按下C-Tab(我把这个快捷键绑定到了命令other-window上),即可以按照左上、左下、右上、右下的顺序轮换当前聚焦的window了。git

若是须要从其它window中复制内容到当前window中粘贴,操做会麻烦一点。以右上角须要左下角的内容为例:github

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

听起来可麻烦了。函数

好在Emacs有一个很是好用的插件,能够把第1和第2个步骤合在一块儿完成。学习

avy

这个很是好用的插件就是avy,它提供的avy-goto-line函数能够一步到位地完成上面的第1和第2个步骤。spa

用Emacs的包管理器就能够安装它插件

M-x package-install RET avy RET

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

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

至此即可以在Emacs中愉快地使用M-g f来快速跳转到当前或其它window中的行了。百闻不如一见,我来演示一番。htm

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显示行号,按行号来跳转对我并不方便。

阅读原文

相关文章
相关标签/搜索