Emacs 删除带有特定单词的行

Emacs 删除带有特定单词的行,emacs,Emacs,我有一个包含多行的文本文件,例如: amanda: foo robert: bla amanda: bar peter: da 我想删除带有amanda的所有行。我使用ctrl-s并分别终止每一行。是否可以一次删除所有行?M-x删除匹配行。可以使用正则表达式。一种方法是使用query将regexp替换为空字符串的^.*amanda.*$正则表达式。虽然是惯用的方法(您应该使用它),但让我们探索其他变体。假设您有一个文本缓冲区,并且希望删除其中包含li的行: Vladimir Ilich Uly

我有一个包含多行的文本文件,例如:

amanda: foo
robert: bla
amanda: bar
peter: da

我想删除带有
amanda
的所有行。我使用
ctrl-s
并分别终止每一行。是否可以一次删除所有行?

M-x删除匹配行
。可以使用正则表达式。

一种方法是使用
query将regexp
替换为空字符串的
^.*amanda.*$
正则表达式。

虽然是惯用的方法(您应该使用它),但让我们探索其他变体。假设您有一个文本缓冲区,并且希望删除其中包含
li
的行:

Vladimir
Ilich
Ulyanov
请记住,
^
匹配正则表达式中的行首和行尾
$
不会触及行后的换行符,因此替换为regex
^.*li.*$
将生成一个空行,如下所示:

由于某些原因,在正则表达式中不可能在
^
之前和
$
之后进行匹配,因此
\s-^.*li.*$
^.*li.*$\s-
将不起作用。注意,
\s-
匹配任何空格字符(即空格、制表符、换行符和回车符),因此从直觉上来说,正则表达式也应该删除换行符,因为换行符是
^
之前或之后唯一可能的空格字符。为了精确匹配换行符,您应该逐字输入它,默认情况下是C-qc-j。Emacs经常用单独的字体颜色将换行符表示为
^J
,它不是
^
J
的序列,而是单个字符,请注意

因此,要删除包含
li
的行,可以对字符串
^.*li.*^J
运行命令
query replace regexp
,其中
^J
是换行符:

Vladimir
Ulyanov

a、 k.a.
刷新行
,这比键入要短一点。您可能希望详细说明您的答案,使其更完整,例如说任一命令应用于点后的缓冲区部分或区域,并且适用于示例的正则表达式是
^amanda.
Vladimir
Ulyanov