我有一个文本文件,其中包含一些示例内容,如下所示:
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的shortcutf。
答案 0 :(得分:65)
M-0 C-x e
重复上一个宏直到发生错误(在最后一行之后,C-s =
或C-n
将会出错。)
你可能听到一声恼人的哔哔声。
答案 1 :(得分:15)
您可以使用“apply-macro-to-region-lines”功能将最后定义的键盘宏应用于区域中的所有行。因此,您遵循的步骤是:
定义你的键盘宏(你已经完成但我已经在第3行添加了另一个 C-f ):
C-x( C-s = RET C-f C-f C-f DEL C-n C-x)
使用“mark-whole-buffer”命令选择整个缓冲区(默认情况下,它绑定到 C-x h )。或者,如果您只想更改一定数量的行,只需选择要更改的行。
运行“apply-macro-to-region-lines”功能(默认情况下,它绑定到 C-x C-k r )。
所有的p都将被移除。
答案 2 :(得分:1)
我通常在用M-x name-last-kbd-macro
定义宏之后为宏命名,所以我可以方便地用M-x调用它。然后我用数字前缀称它。 E.g。
M-1000 M-x macroname
我工作的文件通常没有1000个宏可以操作的地方,所以1000足够大,它会在文件末尾自动停止。如果你有更大的文件,你可以使用1000000作为前缀,如果它仍然不够,那么你可以用1000000作为前缀再次调用它。
答案 3 :(得分:-3)
您可以尝试:M-20000 C-x e
以便在定义宏之后执行20000次这些操作。