是否可以在emacs中自动完成括号或引号?

是否可以在emacs中自动完成括号或引号?,emacs,ide,code-completion,Emacs,Ide,Code Completion,我使用过XCode和Netbeans,我注意到它们有一个自动完成引号或括号的功能(我假设其他IDE也经常这样做)。我不知道这个特性的名称是什么,但是在Emacs中有什么方法可以做到这一点吗 例如,当我输入 printf(" 我想它自动输入 printf("") 将光标置于引号之间 谢谢。基本的变体是。同样的效果,但更复杂一点也可以通过使用来实现。我正在使用来自的代码来实现“电对”。正如我在其他模式中描述的,Python的三引号字符串存在问题。(Python的特性)如果键入M-(,将同时插入A

我使用过XCode和Netbeans,我注意到它们有一个自动完成引号或括号的功能(我假设其他IDE也经常这样做)。我不知道这个特性的名称是什么,但是在Emacs中有什么方法可以做到这一点吗

例如,当我输入

printf("
我想它自动输入

printf("")
将光标置于引号之间


谢谢。

基本的变体是。同样的效果,但更复杂一点也可以通过使用来实现。

我正在使用来自的代码来实现“电对”。正如我在其他模式中描述的,Python的三引号字符串存在问题。(Python的特性)

如果键入M-(,将同时插入A(和A),并将点保留在中间;如果键入M-,则将点移动到结束处)。我一直用这个


还有一种称为“paredit”(可从中获得)的模式,它也可以对引号和其他内容执行这种操作。

默认情况下,paredit模式插入匹配的结束元素,因此在键入时,您将看到类似于
printf()
的内容,然后
printf(“”
的内容,光标将位于引号内

次要模式完全符合您的要求。

我的5美分也在这里

(setq skeleton-pair t)
(defvar skeletons-alist
  '((?\( . ?\))
    (?\" . ?\")
    (?[  . ?])
    (?{  . ?})
    (?$  . ?$)))

(global-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "[") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "\"") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "\'") 'skeleton-pair-insert-maybe)
下一个建议将启用退格删除对:a(|)b->ab

下一个建议将使<代码>向后删除单词(对于ME是B-BACKE),即使它被其他文本分隔,也删除匹配的PAR;非常方便

(defadvice backward-kill-word (around delete-pair activate)
  (if (eq (char-syntax (char-before)) ?\()
      (progn
 (backward-char 1)
 (save-excursion
   (forward-sexp 1)
   (delete-char -1))
 (forward-char 1)
 (append-next-kill)
 (kill-backward-chars 1))
    ad-do-it))

不过,我现在正试图转到paredit

在我的配置中,
M-
被绑定到
移动过去关闭并重新插入
,即它打开一个新行。有没有可能在不重新标识的情况下跳过括号?
M--C-M-u
可能会做你想做的事情。我以前使用过这样的宏,但今天我使用了太多不同的编辑器(emacs、vs、eclipse、pn),以至于我无法依赖这样的功能。相反,我内化了这种行为,如果不本能地插入相应的平衡字符,我几乎无法键入左侧字符。看到我这样做的非程序员认为我很奇怪。似乎AutoPairs和Paredit是两个流行的建议,但看起来AutoPairs是为了与YASnippet很好地集成,这对于进一步的代码完成很好。因为AutoPairs似乎不会自动删除对,这个建议看起来是一个很好的补充。
(defadvice backward-kill-word (around delete-pair activate)
  (if (eq (char-syntax (char-before)) ?\()
      (progn
 (backward-char 1)
 (save-excursion
   (forward-sexp 1)
   (delete-char -1))
 (forward-char 1)
 (append-next-kill)
 (kill-backward-chars 1))
    ad-do-it))