반응형
VI 편집기에서 중복 된 줄을 어떻게 표시 / 강조 표시 할 수 있습니까?
다른 라인과 정확히 중복되는 버퍼의 모든 라인을 어떻게 표시 하시겠습니까? 그들을 표시하는 것은 그들을 강조하거나 캐릭터 또는 무언가를 추가하는 것을 의미합니다. 버퍼의 줄 순서를 유지하고 싶습니다.
전에:
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()
위의 답변 중 어느 것도 나를 위해 일하지 않았으므로 이것이 내가하는 일입니다.
- 다음을 사용하여 파일 정렬
:sort
- 명령 실행
:g/^\(.*\)$\n\1$/p
:sort
과에 저장합니다file1
.:sort u
과에 저장합니다file2
.gvimdiff
또는tkdiff
두 파일.
사용하지 않는 이유 :
V*
정상 모드에서.
단순히 현재 줄의 모든 일치 항목을 검색하여 강조 표시합니다 (설정이 활성화 된 경우 기본값이라고 생각합니다) 게다가 다음을 사용할 수 있습니다.
n
경기를 탐색하려면
Run through the list once, make a map of each string and how many times it occurs. Loop through it again, and append your * to any string that has a value of more than one in the map.
Try:
:%s:^\(.\+\)\n\1:\1*\r\1:
Hope this works.
Update: next try.
:%s:^\(.\+\)$\(\_.\+\)^\1$:\1\r\2\r\1*:
ReferenceURL : https://stackoverflow.com/questions/1268032/how-can-i-mark-highlight-duplicate-lines-in-vi-editor
반응형
'program tip' 카테고리의 다른 글
(아니오) Java의 속성? (0) | 2021.01.06 |
---|---|
국제 지리적 주소는 관계형 데이터베이스에 어떻게 저장되어야합니까? (0) | 2021.01.06 |
테이블 행 오버플로를 숨기는 방법? (0) | 2021.01.06 |
애니메이션으로 UITableViewCell을 추가 / 삭제 하시겠습니까? (0) | 2021.01.06 |
LINQ에서 새로 선택을 사용하여 목록 반환 (0) | 2021.01.06 |