gpt4 book ai didi

emacs - 如何使用 Emacs 同时修改两个匹配的分隔符?

转载 作者:行者123 更新时间:2023-12-02 13:35:42 25 4
gpt4 key购买 nike

虽然这个问题涉及 Emacs(也许还有 Auctex)中 LaTeX 的格式,但我相信这可以应用于 Emacs 中有关括号、方括号和大括号等分隔符的更一般情况。

我希望能够使用 Emacs(和 elisp)执行以下操作,但不知道从哪里开始。假设我有:

(This is in parentheses)

通过 Emacs 中的一些键绑定(bind),我希望 Emacs 能够找到与我的光标所在的分隔符匹配的分隔符(我知道 Emacs 可以做到这一点,因为它可以在各种模式下突出显示匹配的分隔符),并且能够将它们都更改为

\left( This is in parentheses \right)

我希望使用的分隔符是:(...)[...]\lvert ...\rvert \langle ...\rangle\{ ...\}。我需要什么 elisp 来完成这项任务?

欢迎使用更通用的方法来处理匹配分隔符。

最佳答案

在 Emacs 中评估以下命令。重新加载后,您可以将点(文本光标)立即放在右括号之后。然后执行 M-x Replace-matching-parens 将结束的 ) 替换为 \right) 和匹配的开始 paren (\left(.

(defun replace-matching-parens ()
(interactive)
(save-excursion
(let ((end-point (point)))
(backward-list)
(let ((start-point (point)))
(goto-char end-point)
(re-search-backward ")" nil t)
(replace-match " \\\\right)" nil nil)

(goto-char start-point)
(re-search-forward "(" nil t)
(replace-match "\\\\left( " nil nil)))))

interactive 位表示我想要一个“命令”,因此可以使用 M-x 执行它。为了避免光标在执行后出现在奇怪的地方,我将逻辑包装在 save-excursion 中。该点使用 backward-list 跳回到左括号,并保留括号匹配区域的开始和结束位置。最后,从最后开始并向后进行,我更换了琴弦。通过向后替换而不是向前替换,我可以避免在需要之前使 end-point 失效。

将其推广到处理不同类型的分隔符应该不会太糟糕。 backward-list 应该适用于 emacs 识别为 () 类似的任何一对字符串。要添加更多类似括号的字符串对,请查看此 Parenthesis Matching 中的 set-syntax-table文章。

使用global-set-key设置与 replace-matching-parens 的键绑定(bind)。

公平警告:replace-matching-parens 是我实现的第一个 elisp 命令,因此它可能与最佳实践不符。对于所有的专家,我愿意接受建设性的批评。

关于emacs - 如何使用 Emacs 同时修改两个匹配的分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8538688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com