Emacs - 更改 show-paren-mode 区域

Emacs - 更改 show-paren-mode 区域

我喜欢 Emacs 中的 show-paren-mode,但我真的很想更改右括号的突出显示行为。

也就是说,我希望当点位于右括号上时突出显示左括号。当点位于右括号后面的字符上时,默认行为会突出显示左括号。

这很容易改变吗?另外,我对保持 show-paren-mode 行为不变的潜在好处感兴趣。

答案1

从 Emacs 24.3 开始,此功能在 Show Paren 模式下不可用。

这是一些完全未经测试的代码(直接在我的浏览器中键入),它们调整 Show Paren 模式以匹配光标之前而不是之后的右括号。

(defadvice show-paren-function 
  (around show-paren-closing-before
          activate compile)
  (if (eq (syntax-class (syntax-after (point))) 5)
      (save-excursion
        (forward-char)
        ad-do-it)
    ad-do-it))

这也会拾取光标之前的右括号,但如果光标位于右括号后面的右括号上,则光标下方的右括号优先。修复此问题以在光标之前永远不要查看右括号看起来很诡异(可以通过诸如 之类的粗暴黑客来完成(flet ((char-syntax …)) ad-do-it))。

答案2

在 25.1 中,有一个变量可以实现:

(setq show-paren-when-point-inside-parent t)

答案3

我修改了@Gilles 的答案,以便更好地与evil.这增加了额外的约束,即在突出显示右括号之前,邪恶状态不能是emacs,insertreplace

(defadvice show-paren-function
  (around show-paren-closing-before
          activate compile)
  (if (and
       (eq (syntax-class (syntax-after (point))) 5)
       (not (memq evil-state '(emacs insert replace))))
      (save-excursion
        (forward-char)
        ad-do-it)
    ad-do-it))

(这实际上是邪恶默认配置中的预期行为,但由于某种原因它不适用于我的 Emacs 26.3 设置)。

答案4

您可以提供自己的函数作为 的值show-paren-data-function

,----
| show-paren-data-function is a variable defined in `paren.el'.
| Its value is show-paren--default
| 
|   This variable can be risky when used as a file-local variable.
| 
| Documentation:
| Function to find the opener/closer at point and its match.
| The function is called with no argument and should return either nil
| if there's no opener/closer at point, or a list of the form
| (HERE-BEG HERE-END THERE-BEG THERE-END MISMATCH)
| Where HERE-BEG..HERE-END is expected to be around point.
 ----

请参阅 的定义show-paren--default以获取灵感。

至于优势:每次添加右括号时,您都会看到匹配的左括号。有道理,不是吗?

相关内容