代码之家  ›  专栏  ›  技术社区  ›  DaveR

在Emacs中自动关闭大括号?

  •  27
  • DaveR  · 技术社区  · 17 年前

    我见过一个名为Vim的插件 AutoClose (发现于 this post),在键入“(”、“{”等时自动添加右大括号。

    | 是光标):

    int main(|
    

    )

    int main(|)
    

    有人知道emacs有类似的功能吗?这次谷歌让我失望了!

    4 回复  |  直到 9 年前
        1
  •  16
  •   dfa    17 年前

    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)))
    

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

    其他模式也可以提供类似的功能。

        2
  •  16
  •   Trey Jackson    16 年前

    'paredit . 这个 cheat sheet 显示所有可用的命令。恰好比另一个答案中建议的电动模式更喜欢它。虽然paredit只适用于(),但它可能无法满足您的需要。

    但是,老实说,括号周围有很多包。维基上都有 listed here . 解决您问题的方式有:

        3
  •  6
  •   Matus Goljer    13 年前

    我将坏死这条线,并提供另一种选择。最近启动了一个新项目,涉及自动插入对、区域包装、平衡表达式导航等等。功能列表太长,无法在此处给出,因此我将只链接到 smartparens github repo 在那里你可以阅读详细的自述。

    它是前面提到的AutoPair的超集,提供了paredit的大部分核心特性(并扩展到各种不同的对,而不仅仅是那些由emacs语法表识别的对)。

        4
  •  5
  •   Singletoned    16 年前

    written a wonderful post about this 使用骨架模式。他还介绍了如果删除了开头括号,如何删除平衡括号,以及如何处理意外键入结尾括号的情况。(顺便说一句,这两种行为都复制了TextMate)。

    更新:

    自从我发布了这个答案,我发现 Autopair