Vim-选择通过搜索突出显示的文本?


53

在vim中,我经常执行搜索以跳到单词或短语,而不是使用导航h/j/k/l。然后我n跳来跳去。

说我有这段文字:

Time flies like an arrow; fruit flies like a banana. - Groucho Marx

我输入/an arrow并按回车。该短语已突出显示,我通过跳到该短语n

现在,我想直观地选择该文本,也许要对其进行更改或删除。(是的,我知道:s替换命令。)

由于光标位于“箭头”开头的字母“ a”上,因此我可以v按,然后按e几次以突出显示整个短语。但是我感觉有一种更短,更语义的方式。毕竟,我已经指定了感兴趣的文本。

如何编写一个命令,说“直观地选择当前搜索选择?”

Answers:


38

您可以gn在7.4版及更高版本中使用(gN并向后使用)。它取代了v//e把戏。

向前搜索最后使用的搜索模式,例如使用`n`,然后启动可视模式以选择匹配项。

有关更多信息,请参见:help gn此Vimcast


这会将评论复制到另一个答案,并且就目前而言不是很有用。如果您引用该文档以使您的答案可以独立存在,则可能是一个好主意。
bwDraco

2
很高兴使答案更好,但我不确定这是否有帮助。这个问题整齐地列出了目标(“目视选择下一个搜索结果”),gn并且完全按照要求进行。将其提交为单独的答案会强调它是的完全替代v//e。我刚刚编辑了答案以添加文档,这样更好吗?
David Lord

很好,谢谢。如果您需要帮助,请务必查看游览帮助中心。欢迎使用超级用户,希望您过得愉快。
bwDraco

1
太棒了!感谢您使用最新和最新的功能更新此线程。:)
内森·朗

29

尝试这个:

/an arrow
v//e

它进入可视模式,重复上一次搜索并选择直到结束。


1
从Vim 7.4开始gn也这样做(不更改n含义)
smathy

8

我发现这v//e本身是不够的,因为退出可视模式后,跳转到下一个/上一个搜索结果会将光标放在结果的末尾,而不是通常所期望的开始。

为了解决这个问题,我们应该首先跳到搜索结果的结尾(//e),然后从视觉上选择其开始的位置(v??):

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

干杯。


对于对称性:(nnoremap g? ??b<cr>v//e<cr>做同样的事情,但是向后搜索而不是向前搜索)
Kyle Strand 2014年

2

现在有一个Vim-Search-Objects插件,使Vim将搜索匹配项视为常规文本对象,因此您可以va/在执行搜索后简单地(视觉选择匹配项)。


1

一种“笨拙”的方法是映射一个键(在本例中为F5),如下所示:

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

/an arrow按F5键。


由于选择了另一个字符+1。忽略它,它将仅选择要搜索的部分。另一方面,nnoremap <F5> v//e<CR>似乎工作正常。
丹尼斯·威廉姆森

@Dennis Williamson,+ 1必须精确选择要搜索的内容,如果删除+1,则不会选择最后一个字符,因为它不会选择光标所在的字符。nnoremap <F5> v // e <CR>的任何方式都好得多。
约翰尼,2010年

它确实为我选择了角色。如果在您执行完操作后按xcF5但是没有+1整个搜索字符串,包括光标下的字符,将被删除。
丹尼斯·威廉姆森

@Dennis Williamson,我刚刚了解到我的“选择”选项设置为“独占”,但是默认值为“独占”。这就是为什么它在没有+1的情况下对您有效的原因。(请参阅:帮助选择)
约翰尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.