Emacs typeover skeleton-pair-insert-maybe

在Eclipse中,编辑Java代码,如果我键入open-paren,我会得到一对parens。 如果我然后“输入”第二个paren,它不会插入额外的paren。 我如何在emacs中获得它?

Eclipse编辑器非常聪明,当我输入close-paren时,我知道我刚刚完成了我的工作。 光标越过关闭的paren。 如果我然后键入一个分号,同样的事情:它只是覆盖了分号,我没有得到两个分号。

在emacs,java模式或csharp模式中,如果我将open-paren绑定到skeleton-pair-insert-maybe,我会得到一个开放式的paren对,这很好。 但是如果我“通过”密切关注,我会得到两个近距离。

有没有办法教emacs在紧接着前面的骨架对插入之后不插入关闭paren? 如果这是可能的,那么为避免分号加倍,一些类似的情报怎么样呢?

我问的是parens,但同样适用于双引号,花括号,方括号等。任何插入骨架对插入的东西也许。

这篇文章展示了如何做你想做的事。 作为奖励,它还显示了如何设置它,以便如果你在开始字符后立即退格,它也将删除光标后的结束字符。

更新:

自从我发布这个答案以来,我发现了Autopair ,这是一个非常完美的系统。 我一直在使用它并喜欢它。

总结一下我做了什么,我看了看这篇文章,并把它想出来了。 我最终得到的更简单,因为我没有他的额外要求。

我使用了这两个新定义:

(defvar cheeso-skeleton-pair-alist '((?\) . ?\() (?\] . ?\[) (?" . ?"))) (defun cheeso-skeleton-pair-end (arg) "Skip the char if it is an ending, otherwise insert it." (interactive "*p") (let ((char last-command-char)) (if (and (assq char cheeso-skeleton-pair-alist) (eq char (following-char))) (forward-char) (self-insert-command (prefix-numeric-value arg))))) 

然后在我的java-mode-hook中,我以这种方式绑定了close-paren和close-bracket:

 (local-set-key (kbd ")") 'cheeso-skeleton-pair-end) (local-set-key (kbd "]") 'cheeso-skeleton-pair-end) 

我使用了paredit-mode,它可以做到这一点以及更多。

ParEdit听起来像处理你需要的括号部分,但需要注意它是为Common Lisp和Scheme设计的。 Steve Yegge提到了JDEE用于emacs Java开发 ,但我不能从个人经验中说出来,而且我找不到任何关于结构化编辑的文档。