代码之家  ›  专栏  ›  技术社区  ›  PHA

标记重复行并从结果中排除字符

  •  2
  • PHA  · 技术社区  · 7 年前

    我正在使用 this 在文本文件中查找重复行的一行代码:

    :syn clear Repeat | g/^\(.*\)\n\ze\%(.*\n\)*\1$/exe 'syn match Repeat "^' . escape(getline('.'), '".\^$*[]') . '$"' | nohlsearch
    

    当我在上执行时 C 源文件,它正确地返回了这么多 { break; 和空行。然而,它们并不是最有趣的台词。如何从这一行的结果中排除一个或多个字符?

    1 回复  |  直到 7 年前
        1
  •  1
  •   B.G.    7 年前

    哇,太难了。 但我想我明白了:

    :syn clear Repeat | g/^\(^\(\(\s*break\;\|\s*{\|\s*}\)\@!.\).*\)\n\ze\%(.*\n\)*\1$/exe 'syn match Repeat "^' . escape(getline('.'), '".\^$*[]') . '$"' | nohlsearch
    

    它忽略了以下3种模式:

    \s*break;
    \s*}
    \s*{
    

    您可以在列表中添加更多广告,以分隔 \| .

    正如你很容易发现的那样,这并不是一个可读性很好的解决方案。你可以用 very magic mode see :h \v . 但是为什么你甚至需要对两条相同的线路进行测试呢?也许有一个更好的解决方案适用于您的整个用例