作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您将如何标记缓冲区中与其他行完全相同的所有行?通过标记它们,我的意思是突出显示它们或添加字符或其他东西。我想保留缓冲区中行的顺序。
之前:
foo
bar
foo
baz
之后:
foo*
bar
foo*
baz
最佳答案
作为一名前单行者:
:syn clear Repeat | g/^\(.*\)\n\ze\%(.*\n\)*\1$/exe 'syn match Repeat "^' . escape(getline('.'), '".\^$*[]') . '$"' | nohlsearch
这使用Repeat
组来突出显示重复的行。
分解:
syn clear Repeat
::删除之前发现的任何重复g/^\(.*\)\n\ze\%(.*\n\)*\1$/
::用于文件中稍后重复的任何行
^\(.*\)\n
::整行\ze
::匹配结束 - 验证模式的其余部分,但不消耗匹配的文本(正向前瞻)\%(.*\n\)*
::任意数量的整行\1$
::匹配整行的整行重复exe 'syn match Repeat "^' . escape(getline('.'), '".\^$*[]') . '$"'
::添加与此匹配的完整行到 Repeat
语法组
exe
::将给定字符串作为 ex 命令执行getline('.')
::与 g//
匹配的当前行的内容escape(..., '".\^$*[]')
::使用反斜杠转义给定字符以生成合法的正则表达式syn match Repeat "^...$"
::将给定字符串添加到 Repeat
语法组nohlsearch
::从 g//
的搜索中删除突出显示Justin 的非正则表达式方法可能更快:
function! HighlightRepeats() range
let lineCounts = {}
let lineNum = a:firstline
while lineNum <= a:lastline
let lineText = getline(lineNum)
if lineText != ""
let lineCounts[lineText] = (has_key(lineCounts, lineText) ? lineCounts[lineText] : 0) + 1
endif
let lineNum = lineNum + 1
endwhile
exe 'syn clear Repeat'
for lineText in keys(lineCounts)
if lineCounts[lineText] >= 2
exe 'syn match Repeat "^' . escape(lineText, '".\^$*[]') . '$"'
endif
endfor
endfunction
command! -range=% HighlightRepeats <line1>,<line2>call HighlightRepeats()
关于vim - 如何在 VI 编辑器中标记/突出显示重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1268032/
我是一名优秀的程序员,十分优秀!