2009-06-21 92 views
23

我已经看到了插件的Vim称为AutoClose(从this交发现),其自动添加打字时闭括号“(”,“{”等在Emacs中自动关闭大括号?

例如,当我键入以下(|是光标):

int main(| 

我想收)自动为我插入:

int main(|) 

有谁知道SIM卡的emacs的ilar功能 - 谷歌这次失败了!

回答

15

是,this mode is called electric。在你最喜欢的编程模式结合适当的字符给它

(defun electric-pair() 
    "If at end of line, insert character pair without surrounding spaces. 
    Otherwise, just insert the typed character." 
    (interactive) 
    (if (eolp) (let (parens-require-spaces) (insert-pair)) 
    (self-insert-command 1))) 

然后启用:您可以将电行为,这个简单的宏最大的舒适相结合。例如,对于PythonMode:

(add-hook 'python-mode-hook 
      (lambda() 
      (define-key python-mode-map "\"" 'electric-pair) 
      (define-key python-mode-map "\'" 'electric-pair) 
      (define-key python-mode-map "(" 'electric-pair) 
      (define-key python-mode-map "[" 'electric-pair) 
      (define-key python-mode-map "{" 'electric-pair))) 

的CPerl模式提​​供了这是一个内置:

;; from my .emacs 
(add-hook 'cperl-mode-hook 
    (lambda() 
    (setq cperl-hairy nil 
     abbrev-mode t  ;; automatic keyword expansion 
     cperl-highlight-variables-indiscriminately t 
     cperl-auto-newline t 
     cperl-auto-newline-after-colon t 
     cperl-regexp-scan nil 
     cperl-electric-keywords t 
     cperl-electric-linefeed t 
     cperl-electric-parens nil) ;; <------ electric parens! 

其他模式可以提供类似的东西。

+6

'电对模式'已经内置在emacs 24中,可以被'(电对模式1)'使用。 [链接](http://ergoemacs.org/emacs/emacs_insert_brackets_by_pair.html)。 – liuminzhao 2013-10-25 18:37:21

+0

电动模式不会关闭单引号和大括号。无论如何,以启用该? – 2015-03-13 05:46:36

+0

只需M-x定制组'电',并寻找'电对配对'。但要注意的是,无论您的主要模式如何设置都可能是不明智的 - 例如在文本模式下 - 其他主要模式通常会提供自定义,即。 Python单引号按预期工作(增加了结尾))。 – bubak 2015-04-01 09:20:25

5

cmarcelo has written a wonderful post about this using skeleton mode。他还介绍了如何删除平头括号,如果删除了开头括号以及如何处理不小心键入了右括号的情况。 (顺便说一句,两种行为都复制TextMate)。

更新:

因为我张贴了这个答案,我发现Autopair这是一个非常完美的这种使用情况的系统。我一直在使用它,并热爱它。

5

我要这个线程necro并提供另一种选择。最近开始的一个新项目处理自动插入对,区域包裹,平衡表达式导航等等。功能列表太长而无法在此处显示,因此我只会链接到smartparens github repo,您可以在此阅读详细的自述文件。

它是上述AutoPair的超集,提供了大多数paredit的核心功能(并扩展到各种不同的对,不仅仅是那些由emacs语法表识别的)。

相关问题