7

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

例如,当我输入

printf("

我希望它自动输入

printf("")

将光标放在引号之间。

谢谢你。

4

6 回答 6

8

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

于 2010-10-21T12:42:07.113 回答
3

如果您键入 M-(,这将插入 a ( 和 a ),并在两者之间留下点;如果您然后键入 M-),则将点移动到结束 )。我经常用这个。

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

于 2010-10-21T15:30:12.337 回答
3

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

于 2010-10-21T15:52:03.630 回答
2

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

于 2010-10-21T13:50:19.537 回答
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)

下一个建议将启用backspaceto 删除对: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。

于 2010-10-22T08:39:05.090 回答
0

自动配对次要模式完全符合您的要求。

于 2010-10-22T08:17:39.200 回答