我使用过 XCode 和 Netbeans,我注意到它们具有自动完成引号或括号的功能(我假设其他 IDE 也经常这样做)。我不知道这个功能的名称是什么,但是在 Emacs 中有没有办法做到这一点?
例如,当我输入
printf("
我希望它自动输入
printf("")
将光标放在引号之间。
谢谢你。
我使用过 XCode 和 Netbeans,我注意到它们具有自动完成引号或括号的功能(我假设其他 IDE 也经常这样做)。我不知道这个功能的名称是什么,但是在 Emacs 中有没有办法做到这一点?
例如,当我输入
printf("
我希望它自动输入
printf("")
将光标放在引号之间。
谢谢你。
基本变体是AutoPairs。使用YASnippet也可以实现相同的效果,但更复杂一些。
如果您键入 M-(,这将插入 a ( 和 a ),并在两者之间留下点;如果您然后键入 M-),则将点移动到结束 )。我经常用这个。
还有一种称为“paredit”的模式(可从http://mumble.net/~campbell/emacs/paredit.el获得),它也可以为引号做这种事情,可能还有其他事情。
Paredit-mode 默认情况下会插入匹配的结束元素,因此在键入时您会看到类似printf()
thenprintf("")
的内容,并且光标将位于引号内。
我正在使用来自http://cmarcelo.wordpress.com/2008/04/26/a-little-emacs-experiment/的代码来做“电对”。正如我在我的博客中所描述的那样,其他模式在 Python 的三重引号字符串方面存在问题。(Python 特性)
我的 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。
自动配对次要模式完全符合您的要求。