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

mark duplicate lines and exclude characters from the results

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

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

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

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

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

它忽略了以下 3 种模式:

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

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

正如您可以轻松发现的那样,它并不是一个可读性很好的解决方案。您可以使用 very magic mode see :h \v 对其进行改进。但是为什么你甚至需要对 2 条相同的行进行测试?也许您的整个用例有更好的解决方案