如果我要搜索的内容在变量
string
中,以下代码可以工作吗? call search('\V' . escape(string, '\'))
或者还有其他更直接的方法吗?
#1 楼
Vim没有一种(简单的)本机搜索文字的方式。但是,我发现使用正则表达式的默认设置使搜索功能更加强大,如果您至少已经掌握了基础知识的话。有几次我需要从字面上搜索文本,我基本上使用您在此处显示的内容:
call search('\V' . escape(string, '\'))
您可以将其包装到自定义命令中,以从字面上更容易地搜索文本:
" Search literally!
com! -nargs=1 Search :let @/='\V'.escape(<q-args>, '\')| normal! n
,因此您可以使用
进行字面搜索。
:Search my literal text with \ and . and ^ and more regexpes
搜索文本“带有\和。和^等的文本文本。 regexpes。
我从.vimrc中获取了此命令,但我不记得我是否曾经实际使用过该命令,除了显示了如何使搜索文字文本更容易使用之外。 >
#2 楼
如果要搜索多行文字文本:call search('\V' . substitute(escape(text, '\'), '\n', '\n', 'g'))
这里是设置多行文字搜索模式的运算符:
nnoremap ,l :set opfunc=<sid>search_literal<CR>g@
vnoremap ,l :<c-u>call <sid>search_literal(visualmode(), 1)<cr>
function! s:search_literal(type, ...) abort
if a:0
silent exe "normal! gvy"
elseif a:type ==# 'line'
silent exe "normal! '[V']y"
else
silent exe "normal! `[v`]y"
endif
let @/ = '\V' . substitute(escape(@@, '\'), '\n', '\n', 'g')
endfunction
评论
不,那是唯一的可能性。没有其他方法可以按字面意义进行搜索。@ChristianBrabandt想写答案吗?