2010-12-22 33 views
3

可能重複:
How do I bind a command to C-i without changing TAB?如何使用CTRL-I爲使用Emacs快捷不破壞標籤

我要重新定義Emacs的鍵盤快捷鍵控制,我是「移動光標UP」

要做到這一點,我添加了下面一行到我.emacs文件:

(global-set-key (kbd "C-i") 'previous-line) 

然後我發現,tab鍵默認情況下會執行任何綁定到control-i的操作,這顯然不是我想要的。因此,爲了恢復正常的選項卡行爲,我將其添加到我的.emacs文件中。

(global-set-key (kbd "<tab>") 'indent-for-tab-command) 

這大部分工作。但是,製表符不再適用於在迷你緩衝區中自動完成命令。我該如何解決這個問題?還是有更好的方法來解決這個問題? 謝謝。

+0

感謝您指出了這一點。我在那個線程中發現了一些似乎符合我的情況的東西。 – mksuth 2010-12-22 20:57:27

回答

2

在這個線程使用後: How do I bind a command to C-i without changing TAB?

我能夠找到一個解決方案:

;; Translate the problematic keys to the function key Hyper, 
;; then bind this to the desired ctrl-i behavior 
(keyboard-translate ?\C-i ?\H-i) 
(global-set-key [?\H-i] 'previous-line) 
7

Control-i and TAB通常被認爲是相同的(例如在終端中)。不過Emacs會作出區分並允許單獨的綁定。

參見Emacs TAB and C-i

您也可以使用(local-set-key key binding)設置本地綁定。
您可以在您的.emacs中創建(interactive)命令來設置本地綁定,並僅在感興趣的緩衝區中調用該命令。

編輯

舉例:把這個在您的.emacs,或者在一個新的緩衝區,然後做的Mxeval-current-buffer

(defun mybinding() 
    (interactive) 
    (local-set-key [tab] 
     '(lambda() (interactive) 
      (message "hello")))) 

然後去的興趣和一個緩衝的Mxmybinding然後按TAB查看結果(「hello」應顯示爲小緩衝區中的消息)。

嘗試C-F打開一個新的文件,然後按TAB 具有相同完成行爲如常。

+0

所以,如果我已經理解了你的建議,我想要做的只是重新綁定本地緩衝區中的控制我和TAB鍵。這種方式在迷你緩衝區中,它們的默認綁定仍然適用。 – mksuth 2010-12-22 20:44:43