【问题标题】:query-replace for macros in emacs?查询替换emacs中的宏?
【发布时间】:2010-06-28 20:54:46
【问题描述】:

我经常使用 emacs 中内置的 f3/f4 绑定来记录和重复宏,发现它是一个非常强大和有用的功能,尤其是与搜索结合使用时。但是,我最近注意到,每当我执行查询替换(默认为 M-S-5)时,记录我的宏都会停止!有没有办法防止这种情况?我知道查询替换是交互式的,但如果我输入 'y' 3 次以进行 3 次替换,我认为宏也应该这样做。

我认为没问题,在录制宏时,我会执行 C-u 3 M-S-5,所以它会准确地替换 3 次,因为我知道这对于我正在做的事情来说已经足够了。但显然查询替换忽略了 C-u!通常宏使用和 C-u 使用对我来说是无缝的。有没有办法让它们与查询替换一起工作?

【问题讨论】:

    标签: emacs macros keyboard-shortcuts text-editor elisp


    【解决方案1】:

    使用我的 Emacs (23.2) 并且没有用户初始化文件 (emacs -q),我发现 query-replace 工作得很好。这是我的测试

    我输入了:

    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    

    我将光标移到该文本块的顶部

    <f3> M-S-5 3 RET tj RET y y y q <f4>
    

    这给我留下了:

    1 2 tj 4 5
    1 2 tj 4 5
    1 2 tj 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5
    

    再次按 给我留下:

    1 2 tj 4 5
    1 2 tj 4 5
    1 2 tj 4 5
    1 2 3 4 5
    1 2 tj 4 5
    1 2 tj 4 5
    1 2 tj 4 5
    1 2 3 4 5
    

    按预期工作。我建议您尝试使用emacs -q,以确保您没有任何影响行为的自定义设置。

    【讨论】:

    • 我出于习惯按 Ctrl-G 退出查询替换,但由于某种原因它也结束了宏录制。
    • 虽然我仍然很想知道如何让它与 C-u 一起工作 ;)
    • @JosephGarvin C-g 中断当前命令,在您的情况下,该命令正在录制键盘宏。见gnu.org/software/emacs/manual/html_node/emacs/Quitting.html
    • 是的,但“最新”命令是查询替换。如果在执行一个命令(宏录制)期间启动第二个命令(查询替换),我希望 C-g 弹出最顶层的命令。
    猜你喜欢
    • 2010-09-08
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多