vim 在换行符周围搜索

Bry*_*ard 12 vim search

当我在 vim 中编辑 LaTeX 文档时,我经常想搜索一个短语。因为我有 LaTeX 设置来换行,有时一半的短语会在一行上,而另一半在下一行。在这种情况下,搜索找不到我要找的东西。所以例如

blah blah blah hello
world blah blah blah
Run Code Online (Sandbox Code Playgroud)

使用 搜索时/hello world,我没有找到我要找的东西。有没有一种快速简便的方法来修改这个搜索,让我到达我想去的地方?或者更好的是,一种告诉 vim 将任何空白(空格、制表符、新行)与搜索字符串中的空格相匹配的方法?

Bry*_*ard 15

经过更多搜索,看起来最简单的方法是使用\_s. 例如:

/hello\_sworld
Run Code Online (Sandbox Code Playgroud)

  • 当然,如果它们之间可能有多个空格字符,您可能需要 `hello\_s\+world`。 (4认同)

Bry*_*ard 5

这个问题已在http://vim.wikia.com/wiki/Search_across_multiple_lines解决。包括一个可以做我需要的功能。

function! SearchMultiLine(bang, ...)
  if a:0 > 0
    let sep = (a:bang) ? '\_W\+' : '\_s\+'
    let @/ = join(a:000, sep)
  endif
endfunction
command! -bang -nargs=* -complete=tag S call SearchMultiLine(<bang>0, <f-args>)|normal! /<C-R>/<CR>
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:S hello world它进行多行搜索,它会将其转换为hello\s\+world并搜索它。另一个不错的功能是,这还将将此新搜索添加到搜索历史记录中。这允许您根据需要返回并修改搜索q/。它也可以用来做替换:%s//new thing/g。这样做的缺点是,incsearch如果您启用它,它就不会使用。