B)如果有人知道该怎么做,那么如果高亮显示在连续的行中,而只考虑第一个单词(而不是整行),那么可能是一个很好的调整。
如果根据突出显示的行的数量(或取决于AB的单词处于活动状态),使用第二次调整(如果可以将突出显示配置为不同的颜色)。因此,我们只有两个连续的行匹配,然后匹配绿色,3-5个连续的行匹配橙色,6+个然后红色。
#1 楼
以下match
集似乎适用于(A)::syn match Low /\v(.+)\n(\n)/
:syn match Medium /\v(.+)\n(\n){2,4}/
:syn match Critical /\v(.+)\n(\n){5,}/
:hi Critical ctermfg=red
:hi Medium ctermfg=yellow
:hi Low ctermfg=green
顺序似乎很关键。如果在
Low
之后出现Medium
或Critical
匹配项,则将其包含在宽松的要求中,对于Low
w.r.t。 Medium
。添加(例如)第3条或第6条重复线后,突出显示不会立即显示,但是在添加它们后稍稍移动一下。我不确定到底是什么触发了它。
对于B,我想您可以将正则表达式替换为:
,将所有
(.*)
替换为(\S+).*
,将
替换为.*
,或者任何适合您的单词。评论
我给这个答案打了勾,因为对我来说,它是如何进行我需要的突出显示(由问题表示)。 @Matts正则表达式很好,但不能回答我问的实际问题(更改突出显示)。
–马丁·约克
15年2月26日在21:44
#2 楼
首先,这是一个匹配重复行的搜索模式(忽略开头空白的更改): \zs marks start of the pattern. Everything before here will not be highlighted
^ start of the line
\s* leading whitespace
.\+ match 1 or more non-newline characters
\( \) and use parens to capture this in match group 1
\n match the newline character
\( \)\+ 1 or more
copies of what was in the match group 1
\s* \n with leading whitespace followed by a newline
/^\s*\(.\+\)\n\zs\(\s*\n\)\+ the full regex
:help pattern
将提供有关如何制作这样的正则表达式的更多信息:help syntax
将向您展示如何使用此正则表达式并将其转换为突出显示的内容学习编写语法脚本可能很困难,因此,长期解决方案是通过确保设置
'incsearch'
以便即时突出显示并映射关键字进行上述搜索来“即时”执行此操作,即nnoremap <F5> /^\s*\(.\+\)\n\zs\(\s*\n\)\+<CR>
评论
是否有某种自动化的方式分发正则表达式?它提供了这样清晰的描述。
–muru
2015年2月25日在22:14
我一直在手工做。 vim中最简单的快速方法是使用完整的正则表达式在行上执行yy10p之类的操作,然后选择要删除的部分并按r
–马特·博姆(Matt Boehm)
2015年2月25日在22:21
哇!那是相当的努力!
–muru
2015年2月25日在22:21
我做了一个(确实很丑)的vim函数,使它更快一些:gist.github.com/mattboehm/da63a48eedf6f14375aa。选择一条线,单击,r,然后在普通/可视模式下将各行与
–马特·博姆(Matt Boehm)
2015年2月26日在18:42
评论
类似帖子:按正则表达式搜索模式折叠