【问题标题】:how to enable Show-Paren mode only for *.el files如何仅为 *.el 文件启用 Show-Paren 模式
【发布时间】:2012-04-22 09:59:29
【问题描述】:

如何仅为 *.el 文件启用 Show-Paren 模式?

我试过了

(add-hook 'emacs-lisp-mode-hook '(lambda()
                                   (show-paren-mode 1)
                                   ))

但它仍然为所有情况启用 Show-Paren 模式。即使在 *scratch* 缓冲区中,我也启用了 Show-Paren 模式。

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    如前所述,show-paren-mode 是一种全局次要模式。也就是说,可能只能在某些缓冲区上运行它,例如:

    (show-paren-mode)                       ;; activate the needed timer
    (setq show-paren-mode ())                ;; The timer will do nothing if this is nil
    
    (defun show-paren-local-mode ()
      (interactive)
      (make-local-variable 'show-paren-mode) ;; The value of shom-paren-mode will be local to this buffer.
      (setq show-paren-mode t))
    
    (add-hook 'emacs-lisp-mode-hook 'show-paren-local-mode)
    

    它未经测试,它可能无法正常工作。查看文档可能有效,但查看代码可能有效。这可能仅适用于某些版本的 show-paren-mode。

    【讨论】:

      【解决方案2】:

      show-paren-mode 是一个全局次要模式。这意味着它听起来如何。 这在很大程度上是设计使然,因为大多数人(包括我自己)都发现了这一点 次要模式对所有缓冲区都有帮助。你为什么要禁用它的任何 文件?

      来自文档

      Show Paren 模式是一种全局次要模式。启用后,任何 匹配的括号在 Emacs 空闲时间的 show-paren-style' after show-paren-delay' 秒内突出显示。

      【讨论】:

      • Show Paren 模式对于使用 Lisp 来说是绝对不可缺少的。但是使用简单的文本并没有太大的必要,因此我不希望在使用普通文本时额外分心突出显示的内容。
      【解决方案3】:

      您的代码是正确的。但是,您应该考虑*scratch* 缓冲区的主要模式是lisp-interaction-mode,它派生自emacs-lisp-mode(这几乎无关紧要)和模式的定义:

      (define-minor-mode show-paren-mode
        "Toggle visualization of matching parens (Show Paren mode).
      With a prefix argument ARG, enable Show Paren mode if ARG is
      positive, and disable it otherwise.  If called from Lisp, enable
      the mode if ARG is omitted or nil.
      
      Show Paren mode is a global minor mode.  When enabled, any
      matching parenthesis is highlighted in `show-paren-style' after
      `show-paren-delay' seconds of Emacs idle time."
        :global t :group 'paren-showing
      ...)
      

      :global t 是这里的关键 - 模式是全局的,并且在所有缓冲区中启用,无论它们的主要模式如何。

      【讨论】:

      • 但是为什么Text模式会出现同样的问题呢?
      • 这是一个全局的次要模式,在正常操作中,它会在任何地方或任何地方都被激活。
      【解决方案4】:

      我认为你可以使用

      (setq-default show-paren-data-function #'ignore)
      (show-paren-mode)
      

      正式启用该模式但保持安静。然后像

      (defun set-up-emacs-lisp-mode ()
        (setq-local show-paren-data-function #'show-paren--default))
      
      (add-hook 'emacs-lisp-mode-hook #'set-up-emacs-lisp-mode)
      

      在 Emacs Lisp 缓冲区中启用它。我没有测试过这个设置,只有相反的设置(通常启用,仅在文本模式下禁用)。

      我曾经使用(setq-local show-paren-mode nil),但这使得 Emacs 突出显示 Ido 提示符中的大括号,所以我更喜欢 (setq-default show-paren-data-function #'ignore)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-13
        • 2021-10-13
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多