我對Lisp和Emacs都是全新的。在Emacs中,例如在Java中進行編碼時,我希望能夠鍵入「{」,然後點擊「ENTER」,並且爲嵌套在大括號中的任何內容準備好下一行。舉例來說,如果我有以下行:(ELisp)使用大括號自動嵌套下一行返回
public void method()
,我輸入「{」然後回車,我應該得到這樣的:
public void method() {
// indentation applied, no additional tabbing necessary
}
我已經能夠通過對插入,例如,用括號中的光標鍵入「{」給出「{}」。我通過將這些行Emacs的初始化文件,這樣做:
;; insert by pairs (parens, quotes, brackets, braces)
(defun insert-pair (leftChar rightChar)
(if (region-active-p)
(let (
(p1 (region-beginning))
(p2 (region-end))
)
(goto-char p2)
(insert rightChar)
(goto-char p1)
(insert leftChar)
(goto-char (+ p2 2))
)
(progn
(insert leftChar rightChar)
(backward-char 1)))
)
(defun insert-pair-brace() (interactive) (insert-pair "{" "}"))
(global-set-key (kbd "{") 'insert-pair-brace)
爲了得到我上面描述的自動排料,我添加了這些行:
;; automatically nest next line
(defun auto-nest()
(insert "\n\n")
(backward-char 1)
(insert "\t")
)
(defun auto-nest-brace() (interactive) (auto-nest))
(global-set-key (kbd "{ RET") 'auto-nest-brace)
當我啓動Emacs的,但是,我收到此消息:
error: Key sequence { RET starts with non-prefix key {
我在做什麼錯,我該怎麼辦才能解決它?我不想用不同的組合鍵來做到這一點。有很多文本編輯器在其中自動嵌套是標準的,並且它應該很容易在ELisp中進行編碼。
這不回答我的問題。我想知道爲什麼我得到這個錯誤。當「RET」出現在「{」後面時,我也需要自動嵌套。簡而言之,我希望Emacs完全按照Sublime或Eclipse自動嵌套的方式進行操作。 –
您試圖在第一個鍵本身調用命令時綁定一系列鍵。那就是:你將'{'設置爲''insert-pair-brace',這個'{'會在你進入'return'之前調用。 @itsjeyd是對的:你想通過''newline-and-indent'實現自動縮進。 (另請參閱另一個答案中的emacswiki鏈接。)如果僅在打開大括號之後死鎖設置了自動縮進,則可以將返回鍵綁定到測試前大括號的函數,如下所示:'(if( char-equal(char-before)?{)(newline-and-indent)(newline))' – Dan
@丹恩謝謝;)我可能應該提到'newline-and-indent' * indents根據主要模式*,也就是說,它會自動根據當前的上下文來做正確的事情...... – itsjeyd