我希望对我的文件内容进行精确的查找替换
使用上面的正则表达式可以做到,但是每次都这么输入有点麻烦,所以我想为它定制一个宏。
在定制宏时输入以上内容并使用 C-x )
出现以下提示:
但是当我通过 C-x e
命令运行上面的宏时,没有任何反应,只是提示:
我也试了给这个宏添加名字,然后再运行命令,但也还是没有用。请问这是为什么?或者有别的不通过宏的方式也可以达到我的目的吗?
我希望对我的文件内容进行精确的查找替换
使用上面的正则表达式可以做到,但是每次都这么输入有点麻烦,所以我想为它定制一个宏。
在定制宏时输入以上内容并使用 C-x )
出现以下提示:
但是当我通过 C-x e
命令运行上面的宏时,没有任何反应,只是提示:
我也试了给这个宏添加名字,然后再运行命令,但也还是没有用。请问这是为什么?或者有别的不通过宏的方式也可以达到我的目的吗?
应该是「录制宏」。
在我作为十多年资深菜鸡 Emacser 的生涯中,真的没用过几次 kmacro。
这东西,一顿操作结束,你自己心里都没底,到底操作对不对,也没法跟人解释,别人也不帮不上你。侥幸录制成功,如果下一个场景稍微有点差别,这段 kmacro 就用不上。可重用性极低。
而代码,你可以自己调试,可以贴出来请教别人,有问题一目了然。换个场景,稍加修改,即可重用。
代码恒久远,一段永流传。
我的理解是 kmacro 的执行单位是单个命令,在运行 kmacro 的时候 emacs 会尝试完成 query-replace-regexp
,因此不生效。
可以在录制的时候使用 C-x q
或 C-u C-x q
来插入断点,这样每次到断点就会询问(详见 Keyboard Macro Query ):
(defalias 'my-replace
(kmacro "C-M-% \\ < \\ > C-x q <return> t e s t C-x q <return> !"))
不过这样好像并没有简单多少,另一种方法是包装一下 query-replace-regexp
请问一下,您代码中的kmacro函数是什么,我的emacs显示未定义该函数
我也尝试过用以下代码
(define-key evil-normal-state-map (kbd "C-r") (kbd ":query-replace-regexp RET \ < \ > <left> <left>"))
但是不知道为什么,可能是emacs默认在后面加RET?这段代码并没有作用
抱歉,忘记说明 emacs 版本了,我用的是 29.05 。
这是用 insert-kbd-macro
把命名了的宏打印出来的代码,我看了一下 kmacro
好像是 emacs 29 引入的。
你可以自己录制一遍就明白了。
哦哦,我懂了,感谢您的帮助,我的问题已经解决了