一些實用的Emacs配置檔案

伯樂線上讀者發表於2013-09-03

【感謝 iamxuxiao 的熱心翻譯。如果其他朋友也有不錯的原創或譯文,可以嘗試提交到伯樂線上。】

 

以下的Emacs配置檔案是我多年積累起來的,它們在我歷次整理配置檔案(.emacs)的過程中倖存了下來,經過了時間考驗,所以現在我決定發出來和大家分享一下。雖然某些功能很有可能已經有更好的實現方法了,但是這些例子對讀者學習emacs lisp還是會有幫助的。

 

在一些文字的末尾新增遞增的數字

inc-num-region把一段文字中重複出現的數字替換成遞增的數字

比如在emacs選中如下的文字區域

執行該函式,那麼上述文字在緩衝區中變成

再比如選中如下的文字區域

執行給函式,得到

 

給程式碼做筆記

在我們公司使用reviewboard之前,程式碼審查都是面對面進行的。我曾經使用下面這個函式來幫助記錄意見所對應的原始檔和行號。

使用方法是,游標停在原始碼的需要做批註的位置,然後執行該函式,emacs會建立一個新的叫做NOTES的緩衝區,其中記錄原始碼的路徑和游標所在的行號,使用者在接下來的區域中輸入筆記。這個函式的好處是,該新建的buffer的工作模式是compilation-shell-minor-mode。所以可以直接點選其路徑和行號,就可以直接打原始檔跳到相應的行上去。比如

執行該函式,在新buffer中得到如下內容,在compilation-shell-minor-mode模式下,筆記前面的內容將呈現出一個連結,可以點選直接開啟main.cpp

在我的.emacs中,我把這個函式和C-c、r做了繫結

 

自動給C程式碼標頭檔案的首位新增ifndef和endif

get-include-guard函式在我們要編輯一個新標頭檔案時,自動給檔案新增上預處理指示符:ifndef和endif

如果我們在emacs中要新建一個檔案foo.h(C-x,C-f foo.h),emacs新建立的foo.h緩衝區中看上去將是這樣的

 

在foo.cpp和foo.h之間自動的切換

如果一個資料夾中同時含有foo.h和foo.cpp兩個檔案的話,下面的函式幫助你在這兩個檔案之間切換

在我的.emacs中,我把這個函式和C-c,n做了繫結

注:Reddit網友提出ff-find-other-file實現了非常類似的功能

 

c-macro模板

我們在寫C++程式碼的時候,經常要鍵入一些重複的操作,比如歷遍容器,try catch等等。而這些程式碼的特點,可以歸結成一個不變的模板+幾個變化引數,下面的emacs函式自動幫你擴充套件這個模板,列印程式碼。

我們先描述該函式的效果,在C++程式碼中插入如下待擴充套件的句子

然後在該行的末尾執行我們的函式,該行被自動替換成如下的C++程式碼

該c-macro還可以接受變長引數,比如下面的模板接受兩個引數

生成的程式碼如下:

下面的macro將幫助使用者自己列印try catch block

擴充套件之後將變成

下面的j-newline-and-indent是以上功能的入口函式,其將尋找游標前是否出現已定義的c-macro.在上面的例子中就是doit和api-fn。
如果出現了macro就做擴充套件,如果沒有出現,j-newline-and-indent等於內建的newline-and-indent函式:加入新行,並且indent

下面是自定義的兩個模板c-macro,讀者可以根據需要定義自己的macro

相關文章