vim允许搜索原始字符串吗?

如果我要搜索的内容在变量string中,以下代码可以工作吗?

call search('\V' . escape(string, '\'))


或者还有其他更直接的方法吗?

评论

不,那是唯一的可能性。没有其他方法可以按字面意义进行搜索。

@ChristianBrabandt想写答案吗?

#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