2011-08-25 68 views
2

我想有C-<return>地圖move-end-of-line然後newline-and-indent有兩個用一個鍵盤組合執行功能

在我的.emacs我一直在玩弄如下:

(global-set-key (kbd "C-<return>") '(progn (move-end-of-line) (newline-and-indent))) 

而且

(defun c-ret() 
    '(move-end-of-line newline-and-indent)) 
(global-set-key (kbd "C-<return>") 'c-ret) 

但都沒有工作。

指針?

回答

6

您正在引用這些命令。

這意味着它們不會被執行。您還需要(交互式)來表示可從鍵盤調用的emacs。

然後,你需要讓你的參數正確。

此外,我認爲你的返回術語是錯誤的。

您的基本誤解是知道eLisp是如何工作的。沒關係,這是一種神祕的編程語言。

'a.k.a QUOTE幾乎是一個Lisp特定的指令。它說,「不要評估後面發生的事情」,並返回未評估的參數。所以'(富酒吧)是desugared到(QUOTE(FOO BAR)),它返回(FOO BAR)。

試試這個:

(defun c-ret() 
    (interactive) 
    (move-end-of-line nil) 
    (newline-and-indent)) 

(global-set-key (kbd "C-RET") 'c-ret) 
2

你可以做到這一點,而無需編寫任何代碼。請參閱http://www.emacswiki.org/emacs/KeyboardMacrosTricks以獲取有關將命令序列捕獲爲鍵盤宏,命名並將其保存在.emacs中的說明。然後你可以給新命令一個你選擇的鍵綁定,例如(global-set-key (kbd "C-c i") 'new-command-name)

1

如果你想要一個單行的解決方案,這將工作太:

(global-set-key (kbd "C-<return>") (lambda() (interactive) (move-end-of-line nil) (newline-and-indent)))