天天看點

Emacs 不流行但很拉風的 feature

align-regexp

相必大家都用過 C-M-\,一般都能滿足需要,可是有時候需要按一行中的某些字元對齊,比如一些變态的語言或者程式設計規範規定指派語句需要按”=”對齊,那怎麼辦?

align-regexp 使用起來隻需要選中需要對齊的 region,然後執行,輸入需要比對的正規表達式即可。

比如如下代碼:

1
2
3
      
int var = 2;
int variable_is_kinda_long = 3;
int var_is_less_long = 4;      

需要按 = 對齊,選中執行M-x align-regexp, 然後 regexp 填 =,結果如下:

1
2
3
      
int var                    = 2;
int variable_is_kinda_long = 3;
int var_is_less_long       = 4;      

occur

輸出 buffer 中符合正規表達式的所有行,在查找替換時,或者需要重構代碼時,事先用 occur 來驗證下構造的正規表達式的效果,可以避免一時自信或者沖動毀了先前的工作.

anything

用過 Mac 的 quicksilver,或者 Linux 上的 gnome go 的同學,也許會覺得簡直是神器,自稱作業系統 Emacs 豈能自甘落後,anything 絕對值得擁有。

M-x anything, 會出現 anything buffer,其中顯示目前目錄下所有檔案,目前打開的所有 buffer 以及最近打開的檔案,隻需要挑着敲檔案名包含的少數字母,檔案會被選中,然後直接 tab,buffer 會顯示所有操作,輸入操作名稱,當然是少數字母,執行即可,也可以使用 C-n C-p 來選擇。

我使用的是 anything-config,anything-startup 會讓 C-x f 變得很亂很難用,不如 ido-mode 好用。

tramp

遠端檔案編輯的利器,C-x f [email protected]:filepath, 流暢俨如本地檔案,該工具其實很流行,但還有一個功能很少被人使用,但卻可以解決煩惱。

有多少次你編輯了檔案,悲催的發現是隻讀檔案,不能儲存,你又不想退出 emacs,隻能 sudo vim,然後用非常别扭的方式編輯檔案。但有了 tramp,隻需要 C-x f /sudo::/etc/passw,煩惱木有了。

剛在 Emacs 中輸入上面那個遠端檔案的連結時,竟然也觸發啟動了 tramp 連接配接,然後網絡連不上于是 Emacs 僵死了,隻得 force quit 了下,看來不死之身有時候也會出問題的。

re-builder

實時高亮顯示目前 buffer 可以比對所輸入正規表達式的字串,非常适合查找替換前做檢查。功能跟 occur 差不多,隻是 occur 另開一個 buffer 用來顯示比對的行,re-builder 直接顯示在目前 buffer。

ractangle

如下矩陣:

1
2
3
      
1234
2345
3456      

假如我們需要剪切左上 2×2 矩陣,從1排1列,C-space 選中,挪動光标到2排2列,C-x r k, 然後 C-x r y 複制,結果如下:

1
2
3
4
5
6
7
      
// After cut
34
45
3456
// Copy
12
23      

C-x r o 插入空格到選中矩陣,C-x r c 用空格替換所選中矩陣,C-x r d 删除所選矩陣,如下三操作差別 (左上2×2矩陣):

1
2
3
4
5
6
7
8
9
10
11
12
      
// C-x r o
  1234
  2345
3456
// C-x r c
  34
  45
3456
// C-x r d
34
45
3456      

C-x r t 用輸入字元串替換所選矩陣每行, 下圖結果用 xy 替換左上 2×2 矩陣。

1
2
3
      
xy34
xy45
3456      

auto-rever-tail-mode

我們多少次在 terminal 中 tail -f sys.log 來關注 log 的最新輸出, 使用這個指令 Emacs 便自動完成該工作。

wdired-change-to-wdired-mode

在 dired-mode 使用該 mode,就可以像檔案那樣對 dired-mode buffer 進行編輯,可以用 regex-replace,rectangle 指令,批量更改檔案名等。

hexl-mode

檢視編輯非文本檔案利器。

multi-occur-in-matching-buffers

可以對所有打開的 buffer 進行 regex search。

C-u C-spacebar

Emacs 記錄了所有光标移動的曆史,使用這個指令,可以依次回到前一個位置,在閱讀代碼時非常有用。

apropos

搜尋包含某關鍵字或者比對某正規表達式的 Emacs 指令,利用這個可以發現更多給力的 feature。

follow-mode

現在流行的是寬屏,寬度不是問題,是以 Emacs C-x 3 用的很多,但很多長的文檔,要翻好多頁,小拇指真疼。

豎分屏後執行 follow-mode 後,所有 buffer 顯示同一檔案的不同部分,可視範圍翻倍,甚至數倍,這要看你的螢幕有多寬了。

最後

題目中說的非流行是依據我在發現這些 feature 的偶然程度來定的,也許裡面有的可能地球人都知道或者都再用,比如我覺得的,應該大家都會用的,或者一開始就被人推薦使用的,我就沒列在上面,它們是:

org-mode (org2blog), cscope, ido-mode, auto-complete, cedet, magit, yasnippet, ecb …

這裡有個調查,Emacs 中最有用的 feature,大家可以參與下,另外本文中的很多 command 是我看到這個 polls 之後才覺得很強大。

http://stackoverflow.com/questions/60367/the-single-most-useful-emacs-feature

最後,不能忘了很強大很強大的三個指令,分别用來查詢某 key binding,某 function (command),某variable 是幹啥用的:

c-h k / c-h f / c-h v