当我对某个模式进行交互式搜索时,每次点击n
时,我都会得到下一个结果。如何删除/更改我来的每个结果?
理想情况下,我正在寻找的工作方式如下:我点击n
获取搜索结果,然后magic command
以可视模式突出显示该结果,然后我可以d
或c
删除或更改突出显示的文字。
示例:
我输入命令
/hello .
它匹配hello
,空格和后面的任何字符。
所以说它到达的第一场比赛是“你好w”。
现在,我要删除所有hello w
,搜索下一个匹配项(比如hello a
),将下一个匹配项更改为hello there
,并继续执行不同的操作每场比赛。
我不是只寻找搜索和替换,因为我希望能够以交互方式对每个结果执行任何操作,例如删除第一个结果,将第二个结果替换为bye
,并将第三个结果替换为later
。
答案 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 .
匹配的任何内容。这是d7l
或d7[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
命令删除。