2013-05-16 115 views
2

我試圖將c-u m-x indent-pp-sexp映射到單個按鍵,如F5,,以便使用Emacs不會侵蝕我的指紋。emacs將幾個按鍵和命令映射到一個按鍵

我用(global-set-key (kbd "C-u M-x indent-pp-sexp") "<f5>")但我發現了以下錯誤:

global-set-key: Key sequence C-u M-x i n d e n t - p p - s e x p starts with non-prefix key C-u 

編輯

有了這個lambda函數(global-set-key (kbd "<f5>") (lambda (interactive) (universal-argument) (indent-pp-sexp t)))

四處錯誤:

recursive-edit: Wrong type argument: commandp, (lambda (interactive) (universal-argument) (indent-pp-sexp t)) 

奇怪,因爲univeral-argument沒有參數,並indent-pp-sexp需要布爾

回答

2

你有爭論圍繞走錯了路,你綁定鍵的功能,而不是其他的鍵序列。也許你真的在尋找一個named macro;或者你可以寫一些實際的Lisp和綁定,爲F5:

(global-set-key (kbd "<f5>") 
       (function (lambda() (interactive) (indent-pp-sexp t)))) 

在調用形式參數的存在似乎是足夠的選擇前綴參數的功能。

1

你錯過了lambda的參數列表。此外,我認爲通過tindent-pp-sexp否定需要調用universal-argument

(global-set-key (kbd "<f5>") #'(lambda() 
           (interactive) 
           (indent-pp-sexp t))) 
0

我是一個喜歡你的菜鳥,但我已經碰巧像製作宏這樣的基本東西。我真的不知道你的代碼有什麼問題,但這裏是我在家裏做事的演練。您首先需要做的是按F3。然後輸入您的按鍵,完成後按F4。恭喜,你已經定義了一個匿名宏。您可以通過再次按F4重複播放多次。當你玩得夠多的時候,輸入M-x name-last-keybord-macro,並命名爲例如。 foobar。去你的~/.emacs.d/macros/目錄(如果你沒有的話),然後訪問一個你將命名爲foobar.el的文件。在其緩衝區中,M-x insert-kbd-macro。當被問及名稱時,說foobar。你會看到emacs已經將剛錄製的宏的內容輸入到文件中。保存。打開.emacs文件,並添加行:

(load (expand-file-name "~/.emacs.d/macros/foobar.el")) 
(global-set-key (kbd "M-<f5>") 'foobar) 

,事情開始爲我工作重啓後,用M-F5foobar.el宏觀的結合。