在 vim 中搜索视觉选择
Search for visual selection in vim
当我只是搜索一个词时,使用 *
效果很好,但我经常想搜索代码中出现的短语或文件名,如果只是在视觉上 select 字符串并能够点击 *
或 #
来搜索它。事实证明这比我希望的要复杂。我从这个开始:
vnoremap * y/\<<c-r>"<cr>\>
但是如果我的字符串中有一个正斜杠,这就会中断。我试着让它自动用 \/
组合替换正斜杠,如下所示:
vnoremap * yo<esc>pV:s-/-\/-ge<cr>0D"_dd/\<<c-r>"<cr>\>
" y - yank the text
" o<esc> - open a new line
" p - paste the string
" V:s-/-\/-ge<cr> - replace / with \/
" 0D"_dd - Grab the string and get rid of the line I just created
" /\<<c-r>"<cr>\> - Do the search
这有(至少)两个问题:如果我不能编辑当前文件,它就不会工作;如果我试图在评论中抓取文本,它就会崩溃。当我在注释行上使用 o
时,新行以注释开头,这意味着当我 运行 0D
时它不会挖出正确的文本。有没有办法让这项工作按我想要的方式进行?
尽管我即将给出的解决方案也存在,但链接问题中的最佳答案没有进行任何转义。我使用与此非常相似的东西:
当我只是搜索一个词时,使用 *
效果很好,但我经常想搜索代码中出现的短语或文件名,如果只是在视觉上 select 字符串并能够点击 *
或 #
来搜索它。事实证明这比我希望的要复杂。我从这个开始:
vnoremap * y/\<<c-r>"<cr>\>
但是如果我的字符串中有一个正斜杠,这就会中断。我试着让它自动用 \/
组合替换正斜杠,如下所示:
vnoremap * yo<esc>pV:s-/-\/-ge<cr>0D"_dd/\<<c-r>"<cr>\>
" y - yank the text
" o<esc> - open a new line
" p - paste the string
" V:s-/-\/-ge<cr> - replace / with \/
" 0D"_dd - Grab the string and get rid of the line I just created
" /\<<c-r>"<cr>\> - Do the search
这有(至少)两个问题:如果我不能编辑当前文件,它就不会工作;如果我试图在评论中抓取文本,它就会崩溃。当我在注释行上使用 o
时,新行以注释开头,这意味着当我 运行 0D
时它不会挖出正确的文本。有没有办法让这项工作按我想要的方式进行?
尽管我即将给出的解决方案也存在,但链接问题中的最佳答案没有进行任何转义。我使用与此非常相似的东西: