我前不久看到一个熟练的vim忍者,但是我不知道该怎么做。

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之后出现MediumCritical匹配项,则将其包含在宽松的要求中,对于Loww.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