标记重复行并从结果中排除字符
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 条相同的行进行测试?也许您的整个用例有更好的解决方案
我正在使用 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 条相同的行进行测试?也许您的整个用例有更好的解决方案