我喜欢emacs . 我喜欢正则表达式 . 我讨厌emacs的正则表达式语法 - 需要逃避分组的parens和braces,你不要逃避文字的parens,缺少预定义的字符类等 .
我可以替换emacs的正则表达式引擎,或者调整一些设置,这样当我使用Query-replace-regexp(或许多其他功能之一)时,我可以使用我在java / js / perl / ruby / etc中编写的语法...?
Edit: 主题最初是"how to change emacs' regex engine",它不仅会改变转义规则并添加字符类,而且(在帖子中没有提到)添加对各种常见扩展的支持(?...) . 像非捕获parens这样的特征:(?:...),只有当/ if-not后跟:(?= ...)/(?!...)等时才匹配 . 我没有't believe (though happy to be corrected) these are possible with emacs'当前的正则表达式引擎,没有多少语法替换将解决这个问题 .
下面的解决方案通过替换语法emacs理解来解决转义和其他char类的原始问题 . 第二个答案(现已删除)建议建议(添加一个函数在另一个开始时运行)emacs的正则表达式函数来替换所有正则表达式处理 . 作者迅速审查他/她自己意识到它可能会破坏现有的emacs代码,并最终删除了帖子 .
我仍然希望将正则表达式引擎更改为支持扩展的引擎,但我同意普遍改变转义行为会造成严重破坏,我不愿意追逐 . 因此,我正在改变主题以匹配问题并接受回应 .
我突然想到改变引擎以支持通用语法和扩展,建议正则表达式函数将emacs内部代码转换为通用语法,建议交互式函数将我的通用语法转换为emacs语法(所以它可以是转换回普通)...但我认为即使是RMS也会在此之前推荐一个分支 .
2 回答
您可以定义自己的elisp函数,它修改了正则表达式,然后将其传递回emacs . 在伪elisp中:
如果使用Python正则表达式进行增量搜索/替换,并且对于替换和查询替换就足够了,那么visual-regexp-steroids是一个不错的选择 .
它默认为Python regular expressions .
一个非常好的功能是实时搜索/替换,例如从开始
你可以像这样交换数字和字符串:
它可以通过MELPA轻松安装 . 我的.emacs是:
但显然你可以改变以适应,并覆盖内置的键映射,如果你愿意,可以进行搜索和替换 .