有匹配时突出显示整行

时间:2012-11-14 17:11:59

标签: vim line match highlight

如果在搜索后有匹配或有匹配,有没有人知道如何突出显示整行。

体育专业。我搜索/ user

现在我想在有匹配的情况下突出显示整行。

修改
我想在搜索突出显示中使用突出显示 我不想使用突出显示组。

3 个答案:

答案 0 :(得分:4)

突出显示行的替代方法可能是使用quickfix列表。例如,执行以下操作会将与模式/user/匹配的所有行放入当前文件(%)的quickfix列表中。

:vimgrep /user/ %

您可以通过quickfix在单独的窗口中显示:copen列表的内容。您可以在:cnext:cprev和朋友之间在匹配的行之间移动。我个人推荐Tim Pope的优秀unimpaired.vim插件,以提供一些相当漂亮和自然的感觉映射,例如[q]q,以便在quickfix列表中移动。您还可以添加g标记以查找每行多个匹配项,并将其添加到quickfix列表中。

您可能希望映射到此vimgrep命令以使其更快一些。我个人在~/.vimrc

中使用以下内容
nnoremap <leader>/ :vimgrep/<c-r>//g %<cr>:copen<cr>

使用:vimgrep命令的一个缺点是它需要一个保存的文件,因此必须首先保存未保存的缓冲区。您可以使用:global:cgetexpr的组合来解决此问题,如下所示。

:cexpr []
:g//caddexpr expand("%").":".line(".").":".getline(".")

但是,你真的只想用匹配来突出显示行而不是使用quickfix列表。我会建议像:match一样使用

:match Search /.*user.*/

您可以使用您想要的任何高亮组。我选择Search似乎是合适的。要关闭突出显示,只需执行:match而无需任何参数。

我个人更喜欢使用:vimgrepquickfix列表,但您的需求可能与我的不同。

如需更多帮助,请参阅:

:h quickfix
:h :vimgrep
:h :cnext
:h :cexpr
:h :caddexpr
:h :match

答案 1 :(得分:2)

如果您使用

:let @/ = '.*\%(' . @/ . '\m\).*'

应该适用于大多数正则表达式模式(例如,包围处理\|分支)。您可以优化它以识别^$,以及\V等魔术修饰符。

答案 2 :(得分:1)

我不知道这对你是否可以接受:

首先,您需要定义突出显示group:例如userline

:highlight userline ctermbg=darkred guibg=darkred

然后你可以:

:match userline /.*user.*/

所有包含“user”的行都会突出显示。