2010-10-21 62 views
6

我已经使用XCode和Netbeans,并且我注意到它们有一个自动完成引号或圆括号的功能(并且我认为其他IDE也经常这样做)。我不知道这个特性的名字是什么,但是在Emacs中有没有办法做到这一点?是否可以在emacs中自动完成圆括号或引号?

例如,当I型

printf(" 

我想它自动输入

printf("") 

将光标放置在引号之间。

谢谢。

+0

我之前使用过这样的宏,但我今天使用了很多不同的编辑器(emacs,vs,eclipse,pn),我不能依赖这样的特性。相反,我内化了这种行为,并且几乎不需要反射地插入相应的平衡字符就可以输入左侧字符。看到我这样做的非程序员认为我很奇怪。 – Zano 2010-10-22 08:47:11

回答

7

基本变体是AutoPairsYASnippet也可以达到同样的效果,但更复杂一点。

+0

看起来像AutoPairs和Paredit是两个流行的建议,但它看起来像AutoPairs是与YASnippet很好地集成,这对于进一步的代码完成是很好的。 – beardc 2010-10-23 13:15:56

3

如果你键入M-(,它将同时插入一个(和一个)和离开点;如果你然后键入M-),这将移动关闭点)。我经常用这个。

还有一种称为“paredit”的模式(可从http://mumble.net/~campbell/emacs/paredit.el获得),它也可以用于引用以及可能的其他内容。

+0

在我的配置中,'M-)'绑定到'move-past-close-and-reindent',即它开辟了一条新线。是否有可能在没有重新加注的情况下移过封闭的圆括号? – phimuemue 2010-10-22 06:10:56

+0

'M-- C-M-u'可能会做你想做的事。 – offby1 2010-10-24 19:52:47

3

Paredit模式默认插入匹配闭合元素,所以在输入的同时您将看到类似printf()然后printf("")的东西,并且光标将位于引号内。

0

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

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) 

下一页咨询将使退格以删除对:一个(|)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-退格)即使被其他文本分隔也可以删除匹配的文件;非常便利。

(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。

+0

由于Autopairs似乎没有自动删除对,这个反向删除对建议看起来像一个很好的补充。 – beardc 2010-10-23 13:18:00

相关问题