【发布时间】:2014-05-24 02:24:55
【问题描述】:
我对 Lisp 和 Emacs 都是全新的。例如,在 Emacs 中,在使用 Java 编码时,我希望能够键入“{”然后点击“ENTER”并让下一行为大括号中嵌套的任何内容做好准备。例如,如果我有以下行:
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 中编写代码应该很容易。
【问题讨论】:
标签: emacs formatting elisp key-bindings auto-indent