在Vim中删除/更改搜索文本

时间:2010-10-21 04:15:27

标签: search vim keyboard-shortcuts replace

当我对某个模式进行交互式搜索时,每次点击n时,我都会得到下一个结果。如何删除/更改我来的每个结果?

理想情况下,我正在寻找的工作方式如下:我点击n获取搜索结果,然后magic command以可视模式突出显示该结果,然后我可以dc删除或更改突出显示的文字。

示例

我输入命令

/hello .

它匹配hello,空格和后面的任何字符。

所以说它到达的第一场比赛是“你好w”。

现在,我要删除所有hello w,搜索下一个匹配项(比如hello a),将下一个匹配项更改为hello there,并继续执行不同的操作每场比赛。

我不是只寻找搜索和替换,因为我希望能够以交互方式对每个结果执行任何操作,例如删除第一个结果,将第二个结果替换为bye,并将第三个结果替换为later

8 个答案:

答案 0 :(得分:14)

要选择当前比赛的整个比赛(如果您在比赛开始时),可以输入

v//e

删除到比赛结束

d//e

更改匹配

c//e

唯一不好的是您无法使用n(因为它会重做//e)而是必须使用//

所以典型的工作流程看起来像这样

/hello ./    : Jump to the start of the next "hello ."
d//e         : Delete the item
//           : repeat the search to get to the begining of the next "hello ."
c//e         : change it
//           : next one.
etc.

答案 1 :(得分:6)

我认为你想要gn :(转到下一场比赛并在视觉模式中选择它)。您可以使用命令为此添加前缀,例如cgn更改匹配,dgn删除等。我发现如果已经匹配,则使用此匹配,以便这样做。

答案 2 :(得分:2)

我会做以前的海报建议:用d 目标构建一个删除命令并点击。在使用n查找每个事件之后。在这种情况下,7x会删除与hello .匹配的任何内容。这是d7ld7[space]的快捷方式,因为d采用任何移动命令。

但是,如果您想要一个真正通用的解决方案来搜索和删除正则表达式,您可以执行单个替换命令(即使它失败),然后执行搜索并使用&将最后一次替换重新应用于当前行:

:s/hello .//
/hello .
&
n
&

第一行(替换)可能会失败。您仍然可以使用&后来。我很惊讶第一个替换命令没有设置默认模式,但也许它在vi以外的vi中。

答案 3 :(得分:2)

您正在寻找“确认”

:%s/hello .//gc

:进入ex模式,%应用于整个缓冲区,s代替,/ hello ./来搜索该正则表达式,//将其替换为空,g来查找一行上的所有匹配项,和c确认在每场比赛前是否删除。

假设您正在寻找确认。如果你想一次性完成所有这一切,已经有很多次提到

:%s/hello .//g

:进入ex模式,%应用于整个缓冲区,s代替,/ hello ./搜索该正则表达式,//用任何东西替换它,然后g在一行上查找所有匹配项

答案 4 :(得分:1)

使用cwfoo esc 或其他任何内容更改第一个,然后使用.命令为要更改的每个其他事件重复该编辑。

答案 5 :(得分:1)

如何使用录音进行此操作。

qa / textsearch ENTER v9lvq

9是(textsearch - 1的长度),即10 -1 = 9

现在,一旦您在注册a中准备好录制内容,请执行 @agv @a :执行名为a的录音, gv 选择您的搜索文本。)

现在,您可以对所选文本执行任何操作,完成后,您可以转到下一个文本 一个 @@

答案 6 :(得分:0)

按x键。

或用户搜索并替换:[esc] :%s/[search-regex]/[replace-regex]/g

如果replace-regex为空,则您将删除刚搜索过的内容。

答案 7 :(得分:0)

要删除所有包含字符串的行,还可以使用:

:g@search_query@d

g命令进行全局搜索

@分隔符

d命令删除。