我使用过XCode和Netbeans,我注意到它们有一个自动完成引号或括号的功能(我假设其他IDE也经常这样做)。我不知道这个功能的名称是什么,但有没有办法在Emacs中做到这一点?
例如,当我输入
时printf("
我希望自动输入
printf("")
将光标放在引号之间。
谢谢。
答案 0 :(得分:7)
答案 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次要模式完全符合您的要求。