我有一个缓冲区。在该缓冲区中存在一个跨越多行的字符串:
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中对选定的字符串执行精确的多行搜索?
答案 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
答案 3 :(得分:0)
我会映射 * 以搜索视觉选定区域:
vnoremap * "vy/\V<C-R>=substitute(escape(@v,'/\'),'\n','\\n','g')<CR><CR>