我喜欢 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
,insert
或replace
。
(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
以获取灵感。
至于优势:每次添加右括号时,您都会看到匹配的左括号。有道理,不是吗?