在 VI 中,如何跳转到整个当前行的下一个匹配项(如果有)?
就像 * 对单词一样,但对整个当前行而不是当前单词。
对此没有预定义的命令,但您可以执行以下操作:
:map <F7> 0v$hy/\V<C-R>"<CR>
命令的第一部分将整行复制到默认寄存器中,第二部分执行搜索。然后,只需在正常模式下按 F7,就可以了。
另一个我喜欢的:
:map µ yiw:vim /<bslash><lt><C-R>"<bslash>>/ *<CR>
它扩展了使用“*”对当前目录中的所有文件进行的搜索。
我不确定这是否适合您。您可以将光标留在要搜索的那一行,然后按:
/<c-r>=getline('.')<cr>
或者
Y/<c-r>"<BS><cr>
或者
:let @/=getline('.')<cr>
思路一样,复制行/
搜索。但是,这不适用于所有情况,例如,您的行包含“正则表达式”:
aaa.*foo (cursor here)
aaabbfoo
aaa.*foo
vim 将匹配所有三行。
请注意,您可能希望将行文本换行^
并$
获得更好的结果。
肯特答案的略微修改版本应该始终有效并且不会被特殊符号混淆。(即刺痛字面匹配,没有任何解释为正则表达式)
/\V\^<c-r>=escape(getline('.'), '\')<cr>\$
\V
打开非常nomagic 意味着唯一的特殊字符是反斜杠。我们使用转义函数来转义所有反斜杠(感谢 Ingo Karkat)
或者在映射中
:nnoremap <silent> ,* /\V\^<c-r>=escape(getline('.'), '\')<cr>\$<cr>
有几个插件可以扩展*
命令以在可视模式下进行选择;其中之一是我的SearchHighlighting 插件。(插件页面有其他插件的链接。)
这样,对当前行的搜索就变得很快V*
(进入逐行可视模式,搜索选择)。