Search 删除/更改Vim中的搜索文本

Search 删除/更改Vim中的搜索文本,search,vim,keyboard-shortcuts,replace,Search,Vim,Keyboard Shortcuts,Replace,当我对某个模式进行交互式搜索时,每次点击n,我都会得到下一个结果。如何删除/更改我得出的每个结果 理想情况下,我所寻找的是这样的:我点击n获得搜索结果,然后magic命令在视觉模式下突出显示该结果,然后我可以执行d或c删除或更改突出显示的文本。 示例: 我输入命令 /hello . 它匹配hello、空格和其后的任何字符 因此,假设它达到的第一个匹配是“hello w” 现在,我想删除所有的hello w,搜索下一个匹配项(假设它是hello a),将下一个匹配项更改为hello here,并

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

理想情况下,我所寻找的是这样的:我点击
n
获得搜索结果,然后
magic命令
在视觉模式下突出显示该结果,然后我可以执行
d
c
删除或更改突出显示的文本。

示例

我输入命令

/hello .
它匹配
hello
、空格和其后的任何字符

因此,假设它达到的第一个匹配是“hello w”

现在,我想删除所有的
hello w
,搜索下一个匹配项(假设它是
hello a
),将下一个匹配项更改为
hello here
,并继续对每个匹配项执行不同的操作


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

使用
cwfoo
esc或其他方法更改第一个结果,然后,使用
命令对要更改的每个后续事件重复该编辑。

按x键

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


如果
replace regex
为空,您将删除刚才搜索的任何内容。

我将按照之前的一篇海报的建议:使用d目标构建一个delete命令并点击。使用n查找每个事件之后。在这种情况下,
7x
将删除任何匹配的
hello.
这是
d7l
d7[space]
的快捷方式,因为d接受任何移动命令

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

:s/hello .//
/hello .
&
n
&
第一行(替换)可能失败。您仍然可以使用&later再次应用它。我有点惊讶,第一个替换命令没有设置默认模式,但可能它在vim以外的vi中设置了默认模式。

您正在寻找“确认”

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

这是假设你正在寻找确认。如果你想一次完成这一切,它已经被提到很多次了

:%s/hello .//g

:要进入ex模式,%s应用于整个缓冲区,s替换,/hello./to搜索该正则表达式,//将其替换为零,g查找一行中的所有匹配项

要选择当前匹配项的整个匹配项(如果您在匹配项的开头),您可以键入

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.

用录音做这个怎么样

qa/
textsearch
ENTERv9lvq

9是(文本搜索的长度),即10-1=9

现在,在寄存器
a
中准备好录音后,请执行@agv (@a:执行名为
a
的录制,gv选择您的搜索文本。)

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

的一个我想您想要
gn
:(转到下一个匹配项并)在视觉模式下选择它。您可以使用命令作为前缀,例如,
cgn
更改匹配,
dgn
删除等。我发现,如果已在匹配项上,则使用此匹配项,因此应该这样做。

对于删除包含字符串的所有行,您可以使用:

:g@search_query@d
g
全局搜索命令

@
分隔符


d
要删除的命令。

这会更改单词,OP想要删除/替换文本。好的,所以使用您需要的任何文本编辑命令来更改您需要更改的内容。如果没有具体的例子,就无法推荐特定的内容。如果要替换文本,只需执行[r]并键入,然后执行[esc][n][r],再键入一些。但是搜索和替换可能最适合你。难道不是只删除一个字符吗?和
r
只替换一个字符?我正在寻找删除或替换整个匹配的文本。谢谢你的回答!当我在视觉模式下进行匹配时,是否有办法让Vim高亮显示每个匹配,以便对视觉选择的文本进行操作?这将是最佳解决方案。您可以随时通过打开hlsearch(
:set-hlsearch
)将当前搜索模式高亮显示。我的意思是在视觉模式下高亮显示它,以便我可以对其执行操作。@shoebax639:这将用
hello w
替换所有的
hello
,这不是我想要的:/我知道确认,但我在寻找一些不同的东西。请查看问题中新的粗体文本以进行澄清。您所描述的内容已确认。键入top命令后,它将显示第一个结果并询问是否要替换。你说“y”或“n”,不管是做还是不做,然后转到下一个例子,问同样的问题啊,这正是我想要的!令人惊叹的!只是想澄清一下,
/e
到底在搜索什么?比赛结束了吗?它是如何工作的?一个更一般的问题,实际上是,
/
搜索什么?实际上,我已经单独问了这个问题,请在这里回答:这应该是答案,它更实用!这看起来令人敬畏
:g@search_query@d