【发布时间】:2012-11-03 05:43:30
【问题描述】:
有谁知道在搜索后如果有匹配项或匹配项,如何突出显示整行。
p.e.我搜索 /user
现在,如果有匹配项,我想突出显示整行。
编辑
我想在搜索突出显示中使用突出显示。
我不想使用突出显示组。
【问题讨论】:
有谁知道在搜索后如果有匹配项或匹配项,如何突出显示整行。
p.e.我搜索 /user
现在,如果有匹配项,我想突出显示整行。
编辑
我想在搜索突出显示中使用突出显示。
我不想使用突出显示组。
【问题讨论】:
我不知道你是否可以接受:
首先您需要定义一个突出显示group:例如userline
:highlight userline ctermbg=darkred guibg=darkred
那么你可以:
:match userline /.*user.*/
所有包含“用户”的行都会被突出显示。
【讨论】:
突出显示行的替代方法可能是使用quickfix 列表。例如,执行以下操作会将与模式 /user/ 匹配的所有行放入当前文件 (%) 的快速修复列表中。
:vimgrep /user/ %
您可以通过执行:copen 在单独的窗口中显示quickfix 列表的内容。您可以通过: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,不带任何参数。
我个人更喜欢使用:vimgrep 和quickfix 列表,但您的需求可能与我的不同。
如需更多帮助,请参阅:
:h quickfix
:h :vimgrep
:h :cnext
:h :cexpr
:h :caddexpr
:h :match
【讨论】:
/.*search-item.*,但它在所有情况下都不起作用 p.e.它不适用于很多正则表达式搜索。
如果你使用
:let @/ = '.*\%(' . @/ . '\m\).*'
这应该适用于大多数正则表达式模式(例如,括号处理 \| 分支)。你可以改进它以识别^ 和$,以及像\V 这样的魔法修饰符。
【讨论】:
.*\(^... 将匹配文字 ^,不再匹配行首。您必须检查@/ 并调整连接。
\V 改变了尾随.* 的含义;那么它需要是\.\*。我在答案中添加了一个中和的\m。
\%V( 放在您的代码之前,将\) 放在您的代码之后,但它不起作用。
split(text, "\n"),像我的回答一样修改每个部分,然后重新join(text, "\n")。