在 vim 中,我经常执行搜索以跳转到某个单词或短语,而不是使用 导航到那里h/j/k/l
。然后我点击n
在出现的地方之间跳转。
假设我有这样的一段文字:
Time flies like an arrow; fruit flies like a banana. - Groucho Marx
我输入/an arrow
并按下回车键。该短语被突出显示,然后我使用 跳转到该短语n
。
现在我想视觉上选择该文本,也许是要更改它或删除它。(是的,我知道:s
替换命令。)
由于我的光标位于“an arrow”开头的字母“a”上,因此我可以点击v
,然后按e
几次以突出显示整个短语。但我觉得有一种更短、更语义的方式。毕竟,我已经指定了我感兴趣的文本。
我该如何编写命令来表示“直观地选择当前搜索选项吗?”
答案1
您可以gn
在 7.4 及以上版本中使用(也gN
可以向后使用)。它取代了v//e
技巧。
向前搜索最后使用的搜索模式,如使用“n”,并启动可视模式来选择匹配项。
参见:help gn
或这个 Vimcast了解更多信息。
答案2
尝试这个:
/an arrow
v//e
它进入可视模式,重复上次搜索并选择直至结束。
答案3
我发现这v//e
本身是不够的,因为退出可视模式后,跳转到下一个/上一个搜索结果会将光标放在结果的末尾,而不是像通常期望的那样放在结果的开头。
为了解决这个问题,我们应该首先跳转到搜索结果的末尾(//e
),然后直观地选择它的开头(v??
):
" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>
干杯。
答案4
一种“更愚蠢”的方法是映射一个键(在本例中为 F5),如下所示:
nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>
/an arrow
按下 F5后。