在vim中精确选择多行字符串搜索

时间:2018-07-05 07:00:54

标签: vim

我有一个缓冲区。在该缓冲区中存在一个跨越多行的字符串:

asdf
qrughatuxlnjtzu
... tens more lines...

我的光标下有一个可以立即使用的字符串实例。我想在同一缓冲区中搜索此多行字符串的 other 实例,而不必手动将多行字符串的重要部分复制/编辑到命令缓冲区中(nb用它们的正则表达式等效替换换行很重要编辑)。

我尝试使用How do I search for the selected text?(可视选择->猛击->命令缓冲区)+ Exact string match in vim? (Like 'regex-off' mode in less.)(普通搜索),但是这些方法似乎不适用于多行。

如何在Vim中对选定的字符串执行精确的多行搜索?

4 个答案:

答案 0 :(得分:2)

nnoremap <your keys> :<c-u>let @/=@"<cr>gvy:let [@/,@"]=[@",@/]<cr>/\V<c-r>=substitute(escape(@/,'/\'),'\n','\\n','g')<cr><cr>

然后在视觉上选择带有V的行(对于部分行,选择v),然后按<ESC><your keys>

来源是here(请参阅@Peter Rincker的回答)。

答案 1 :(得分:0)

您可以使用\n作为换行符进行搜索:

/asdf\nqrughatuxlnjtzu

答案 2 :(得分:0)

根据文件中的换行符,您也可以在搜索中包括换行符,

例如对于Unix行尾,您可以搜索

/asdf\nqrughatuxlnjtzu$

对于Windows行尾,您应该使用\r\n

上面的$字符将搜索到行尾,因此将排除任何行尾,但这对于避免与诸如

asdf
qrughatuxlnjtzuNotToBeMatched

另请参见enter link description here

答案 3 :(得分:0)

我会映射 * 以搜索视觉选定区域:

vnoremap * "vy/\V<C-R>=substitute(escape(@v,'/\'),'\n','\\n','g')<CR><CR>