2013-05-09 59 views
2

我希望能夠將鍵盤宏保存在emacs中並以批處理模式重複應用到文件中。舉一個簡單的例子,我做了下面的文件paren-delete.el,它應該刪除所有括號及其內容。當我運行emacs --batch target.txt --load paren-delete.el時,似乎沒有任何改變。看起來只有第一個kbd函數能夠完成它應該做的事情,所以我不明白這個命令是如何工作的。以批處理模式運行emacs鍵盤宏

我知道最好避免使用鍵盤宏並在正確的elisp中編寫我的函數,但我更喜歡一個快速而又髒的解決方案,而且我覺得我很接近。

(kbd "M-x load-library kmacro") 

(fset 'delete-paren 
    (lambda (&optional arg) "Keyboard macro." (interactive "p") 
(kmacro-exec-ring-item (quote ("^S(^M^B^@^[^N^W" 0 "%d")) arg))) 

(start-kbd-macro nil) 

(kbd "M-x delete-paren") 

(end-kbd-macro) 

(kbd "C-u 0 C-x e") 

(save-buffer) 

回答

1

一個答案:

  1. 定義運行的宏功能:在一個Emacs-Lisp的緩衝區寫入此留下光標在年底:: (defun foo()

  2. M-x insert-kbd-macro RET

    現在你有這個文本,但有了定義代替XXXXX鍵盤宏:

    (defun定義FOO()(setq最後骨節病宏XXXXX)

  3. 通過execute-kbd-macro更換setq last-kbd-macro,並添加最終)

    (defun定義FOO ()(execute-kbd-macro XXXXX)

  4. 然後用C-x C-e之後的定義或C-M-x裏面的任何地方。

    它定義了函數foo,它只是做你的鍵盤宏(在相同的上下文中,例如相同的模式,如此相同的鍵綁定)。

  5. 將定義保存到init文件。您可以在批處理模式下使用Emacs。您也可以在()之後添加(interactive)以使其成爲命令,因此您可以使用M-x

另一個答案:

隨着Bookmark+,使用C-u M-x bmkp-make-function-bookmark創建從最後的鍵盤宏書籤。提示您輸入書籤名稱。

書籤是持久的。要在批處理模式下使用書籤,請將其作爲參數bookmark-jump,如下所示:(bookmark-jump THE-BOOKMARK-NAME)