我通常通过:/string搜索单词,但是如果必须搜索整个当前行,该怎么做。例如,如果cursor目前位于line 1,如何与:/类似地搜索包含整个当前行的文本。光标应跳到匹配的line 4,然后再跳到line 7

#1 楼

这是我的操作方法:


添加行(到未命名的寄存器中),但不包括结尾的换行符:0y$
不可思议的搜索:/\V

添加虚线:<c-r>"

启动搜索:<cr>


@EvergreenTree指出注释,您当然可以创建映射以一次性执行所有步骤:

nnoremap <leader>* 0y$/\V<c-r>"<cr>


相关帮助主题:

:help registers
:help /magic
:help c_CTRL-R


NB如果您要搜索的行中包含反斜杠,即使进行非常神奇的搜索,您仍需要遍历并转义(通过添加另一个反斜杠)。

评论


当然,您也可以为此创建一个映射:nnoremap {key} 0y $ / \ V

–EvergreenTree
16年1月21日在23:50

#2 楼

尤其是出于制图目的,我发现使用getline()比拉动自己更优雅。用字符串getline()调用'.'将返回光标下方的行。有两个不错的选择:

:exec '/' . getline('.')


将字符串'/'getline()返回的内容解析在一起,并将其作为vim命令执行。



/<C-r>=getline('.')<CR>


,它使用表达式寄存器@=。在第一个=之后计算<CR>之后的表达式,并将其放在命令行中。

评论


真好!当该行包含/或'之类的字符时,它不能很好地工作。无论如何,我今天学到了一些东西!谢谢

–Luc M
17年8月3日在16:16

#3 楼

如果您的行包含某些被解释为模式一部分的项目,则现有答案均会失败。 \V点可以到达大部分位置,但仍会与反斜杠混在一起。 >然后,如果要在映射中使用它,则最后需要一两个<Enter>,这取决于您希望它如何工作。

评论


很好的答案!行通常包含两种斜线,这会混淆其他答案。最后一个转义参数也应该包含正斜杠:escape(…,'/ \')

– bobbogo
19年1月15日在10:04



#4 楼

就个人而言,我会得到一个视觉明星插件(那里几乎没有)。有一个不错的Vimcast关于此内容:搜索选定的文本。这意味着您可以在视觉上选择该行,然后按*。 />
注意:此映射不支持可视块(vimrc)。

评论


我添加了映射,但实际上它跳到第一个匹配的单词,而不是选择整行。

–manav m-n
16年1月22日在15:04

如果匹配一个单词,那么我认为您是在正常模式下使用*或未正确安装映射。

– Peter Rincker
16年1月22日在15:15

#5 楼

安装了vim-asterisk后,只需使用V$*(或0v$*)来选择当前行并搜索它。

评论


*是否仅搜索光标下方的单词,而不是当前的视觉选择?

–EvergreenTree
16年1月22日在14:06

@EvergreenTree我确实忘记提及插件了。感谢通知

–adelarsq
16年1月22日在16:17

#6 楼

完成此操作的另一种方法是使用命令行窗口:打开命令行窗口
yy/<Ctrl-F>p<Enter>粘贴行
按Enter开始搜索


评论


您还可以使用q /获得与/ 相同的效果

– evilsoup
16年1月23日,0:59

#7 楼

http://vim.wikia.com/wiki/Searching_for_expressions_which_include_slashes指出可以直接设置搜索寄存器,如下所示:

:let @/='/abc/def/ghi/'


这允许在线搜索甚至在行中包含斜线时也可以使用。