当前位置:  开发笔记 > 编程语言 > 正文

自动关闭Emacs中的大括号?

如何解决《自动关闭Emacs中的大括号?》经验,为你挑选了4个好方法。

我见过一个Vim的插件,名为AutoClose(从这篇文章中发现),在输入'(','{'等时会自动添加右括号.

例如; 当我键入以下内容(|是光标)时:

int main(|

我希望)自动插入关闭:

int main(|)

有没有人知道emacs的类似功能 - 谷歌这次失败了!



1> dfa..:

是的,这种模式叫做电动.您可以将电动行为与这个简单的宏结合起来,以获得最大的舒适度:

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

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


`electric-pair-mode`已经在emacs 24中构建,可以被`(电对模式1)`使用.[链接](http://ergoemacs.org/emacs/emacs_insert_brackets_by_pair.html).

2> Trey Jackson..:

还有'paredit.该备忘单会显示所有可用的命令.碰巧喜欢它比另一个答案中建议的电动模式更好.虽然paredit仅适用于(),但它可能无法满足您的需求.

但是,说实话,围绕括号有一堆包.维基将它们全部列在这里.解决您问题的模式是:

balancedel

electricdotanddash

universalcloseparen

electricpair

骨架

插入语

AutoPairs



3> Singletoned..:

cmarcelo 使用骨架模式写了一篇很棒的文章.他还展示了如果删除开口支架以及如何处理意外键入右括号的情况,如何移除平衡支架.(顺便提一下两种行为都复制TextMate).

更新:

自从我发布这个答案以来,我发现了Autopair,这是一个非常完美的系统.我一直在使用它并喜欢它.



4> 小智..:

我要破坏这个线程,并提供另一种选择.最近开始的一个新项目涉及自动插入对,区域包裹,平衡表达式导航以及更多内容.功能列表太长了,所以我只需链接到smartparens github repo,您可以在其中阅读详细的自述文件.

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

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有