【问题标题】:Running a macro till the end of text file in Emacs在 Emacs 中运行宏直到文本文件的结尾
【发布时间】:2011-11-24 07:25:50
【问题描述】:

我有一个包含一些示例内容的文本文件,如下所示:

Sno = 1p
Sno = 2p
Sno = 3p

我想要的是从每一列中删除 p。 带着这个意图,我写了一个宏:

M-x //go to buffer
C-x (//start the macro
C-s = // search for equalto sign
RET C-f C-f // reach to te alphabet 'p'
DEL // Delete
C-n  C-x )//go to new line and Close the macro definition 
C-x e

e 两次将删除p,但如果我想做同样的事情直到文件结束,我该怎么做我不能一直按e 如果我有20000 行这样的行.应该怎么做??

请不要建议使用正则表达式,因为这是一个示例,而不是实际情况。 请不要建议任何 elisp,我很乐意记住 emacs 的快捷方式。

【问题讨论】:

    标签: emacs macros text-processing


    【解决方案1】:

    M-0 C-x e 重复最后一个宏直到发生错误(在最后一行之后,C-s =C-n 将是一个错误)。

    您可能会听到烦人的哔哔声。

    【讨论】:

    • 这是最好的答案,我只需要运行一个宏超过 9000 次,这让我免于键盘手指疼痛!
    • 有什么办法让它显示它工作时发生的事情?
    【解决方案2】:

    您可以使用“apply-macro-to-region-lines”功能将最后定义的键盘宏应用到区域中的所有行。因此,您遵循的步骤是:

    1. 定义你的键盘宏(你已经完成了,但我在第三行添加了另一个 C-f):

      C-x ( C-s = RET C-f C-f C-f 删除 C-n C-x )

    2. 使用“mark-whole-buffer”命令选择整个缓冲区(默认情况下,它绑定到 C-x h)。或者,如果您只想更改一定数量的行,只需选择要更改的行即可。

    3. 运行“apply-macro-to-region-lines”函数(默认绑定到C-x C-k r)。

    所有的 p 都将被删除。

    【讨论】:

      【解决方案3】:

      我通常在用M-x name-last-kbd-macro定义宏后给它一个名字,这样我可以方便地用M-x调用它。然后我用数字前缀调用它。例如

      M-1000 M-x macroname
      

      我处理的文件通常没有 1000 个宏可以作用的地方,所以 1000 足够大,它会在文件末尾自动停止。如果您有较大的文件,您可以使用 1000000 作为前缀,如果仍然不够,则可以使用 1000000 作为前缀再次调用它。

      【讨论】:

        【解决方案4】:

        您可以尝试:M-20000 C-x e,以便在定义宏后执行 20000 次。

        【讨论】:

        • 20,000 只是一个例子,我写的宏不是为了这个简单的东西,除了我不知道行数,我想一直写到行尾。
        • 改用尼采茹的答案。这样我就不需要使用像 20000 这样的随机数了。
        • 您应该将 Nietzche-jou ​​的答案标记为正确答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多