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顯示行號,按行號來跳轉對我並不方便。

閱讀原文

相關文章
相關標籤/搜索