Emacs的Tab鍵

fromr:http://www.cnblogs.com/gamesun/archive/2012/12/23/2830184.html

在Windows裏待久了的人,初用Emacs時,對它的很多按鍵功能會很不適應,其中之一就是TAB鍵,有時候按一下TAB鍵會縮進很多,有時候無論怎麼按都沒反應,讓人摸不着頭腦。

Emacs中的TAB鍵,默認功能是自動排版(在編程mode下),就像VC中的Alt+F8,對光標所在行或者選中區域的所有行按照語言排版格式重新排版。有人問那怎麼才能輸入一個水平製表符,一個普通的Tab,Emacs默認的方法是組合鍵C-q Tab,需要3個鍵,好痛苦啊,如果要改回你認識的Tab鍵,可以這樣重新定義Tab的功能,輸入1個Ascii爲9的字符(即tab):

(global-set-key (kbd "<tab>") '(lambda () (interactive) (insert-char 9 1)))

但是,請相信我,這不會讓你爽多久,很快你會發現Shift-Tab不是反向縮進,而且在選中狀態下按Tab,也不是你想象的那樣所有行縮進,而是選擇被取消並在光標處插入一個普普通通的Tab… 我妥協了,把Tab保留在默認的排版功能,而像多數Emacser那樣,把”鍵入一個Tab“綁定到一個空閒的C-tab組合鍵上。

(global-set-key [C-tab] '(lambda () (interactive) (insert-char 9 1)))

因爲對我來說,需要”鍵入一個Tab“的情況不是很多,相較起來,也許排版要用的更多。

順便一提,在網上看到有人把C-i鍵重定義後,Tab鍵也會跟着變成同樣的功能。(參考:How do I bind a command to C-i without changing TAB?)在原帖的回答裏,下面的方法據說最有效,可以改C-i鍵而又不影響Tab

(setq local-function-key-map (delq '(kp-tab . [9]) local-function-key-map))
(global-set-key (kbd "C-i") 'forward-word)

因爲在elisp的說明文檔裏這樣講:In ASCII, C-i and <TAB> are the same character.(參考:GNU Emacs Lisp Reference Manual-21.7.2 Function Keys)我沒能完全理解這句話,雖然我知道ASCII裏有<TAB>,但是ASCII裏竟然還有C-i ?

但是不知道爲什麼,上面的配置在我電腦上行不通,第一條刪除(kp-tab . [9])按鍵映射,我這裏刪不掉,或者是最後一個參數改成function-key-map也不行,用C-h v local-function-key-map查看(kp-tab . [9])還在,後來我用delete成功刪掉了(delete '(kp-tab . [9]) local-function-key-map)這次(kp-tab . [9])終於沒有了,但是改C-i鍵依然會影響Tab鍵,WTF!,有高手的話希望能指點一下。下面介紹我實驗出來的終極奧義

(global-set-key (kbd "C-i")  'command1)
(global-set-key (kbd "<tab>") 'command2)

這下可以使<tab>"和"C-i"不再影響了,但是,Tab鍵也被全局鎖定爲這一個功能了,本來Tab鍵在不同模式下有不同功能,如果這麼定義的話,就要追加定義一堆東西,還是放棄吧,放棄C-i鍵。關於Tab鍵就折騰到這吧。

軟件環境
Emacs for Windows, version 24.2
OS:Windows7中文版

發佈了28 篇原創文章 · 獲贊 19 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章