2

是否有任何等效于“删除直到当前突出显示的搜索匹配结束并进入插入模式”的命令?

例如,我搜索一个词:

/Element

它找到 string ExampleElementExample,将光标放在 Element 中的 E 上,然后突出显示Element

我想要一个通用命令,该命令适用于与此特定情况等效c7lctE在此特定情况下的所有搜索。但是,我也希望能够通过按n,轻松地将此命令重复到下一场比赛.

c//e基本上可以满足我的要求,但由于它替换了当前的搜索缓冲区,所以n没有达到下一个匹配。现在我正在使用ctE或视觉模式,但我觉得必须有更好的选择。

执行此命令的最快和最有效的方法是什么?

4

3 回答 3

3

如果你的 Vim 足够新(7.3,补丁级别高于 6xx),你可以使用gn

barbazfoobazbar

/foo<CR>

barbaz[foo]bazbar

cgnvim<CR>

barbazvimbazbar

您可以点击.跳转到下一个foo 一次将其更改为vim

:help gn

于 2013-11-12T09:04:54.877 回答
2

我认为最好的选择是使用搜索并替换为确认标志。

:%s//replace/gc

如果您将搜索字符串留空,它将自动使用当前搜索字符串。通过c旗帜,它会询问您是否允许更换,并在决定后将移至下一场比赛。该g标志将找到所有匹配项,而不仅仅是一行中的第一个匹配项,我希望这是您正在寻找的。

于 2013-11-12T07:32:53.813 回答
1

您可以使用从Vim Tips Wiki 上的Copy or change search hit获取的以下自定义文本对象:

" Make a simple "search" text object.
vnoremap <silent> s //e<C-r>=&selection=='exclusive'?'+1':''<CR><CR>
    \:<C-u>call histdel('search',-1)<Bar>let @/=histget('search',-1)<CR>gv
omap s :normal vs<CR>
于 2013-11-12T07:47:42.753 回答