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

时间:2010-10-21 12:35:30

标签: emacs ide code-completion

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

例如,当我输入

printf("

我希望自动输入

printf("")

将光标放在引号之间。

谢谢。

6 个答案:

答案 0 :(得分:7)

基本变体是AutoPairs。使用YASnippet也可以实现相同的效果,但更复杂一点。

答案 1 :(得分:3)

如果你输入M-(那将插入一个(和一个),并在两者之间留点;如果你输入M-),那将在结束时移动点。我一直都在用这个。

还有一种名为“paredit”的模式(可从http://mumble.net/~campbell/emacs/paredit.el获得),它也可以为引号做这类事情,也可能是其他东西。

答案 2 :(得分:3)

Paredit-mode默认情况下会插入匹配的关闭元素,因此在输入时您会看到类似printf()然后printf("")的内容,并且光标将位于引号内。

答案 3 :(得分:2)

我正在使用http://cmarcelo.wordpress.com/2008/04/26/a-little-emacs-experiment/的代码来做“电子对”。正如我在my blog中描述的那样,其他模式在Python的三重引用字符串中存在问题。 (Python的特点)

答案 4 :(得分:2)

我的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)

下一个建议将启用 backspace 删除对:a(|)b - > AB

(defadvice delete-backward-char (before delete-empty-pair activate)
  (if (eq (cdr (assq (char-before) skeletons-alist)) (char-after))
      (and (char-after) (delete-char 1))))

接下来的建议会使backward-kill-word(对我来说是 M-backspace )删除匹配的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。

答案 5 :(得分:0)

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

相关问题