좋아요, 여기에 나와 함께 할 수있는 최선이 있습니다. 이 함수는 현재 버퍼의 맨 위에서 시작하여 ]c
동작을 사용하여 더 이상 효과가없는 때까지 변경 사항을 이동합니다. 변경 횟수를 반환합니다 (커서가 diff 버퍼가 아닌 경우 커서가 0
).
내 상태 표시 줄에 포함될 때 정상적으로 작동하며 눈에 띄는 성능 저하가 없습니다.
현재 변경의 "번호"를 찾는 것과 마찬가지로 커서 위치 이전의 변경 횟수를 계산하기 위해 역방향 [c
동작을 사용하는 함수가 있습니다. 반환 된 값을 꽤 옳지 않다 ... 나는 커서가 변경된 텍스트 내에서 "변경된"텍스트의 첫 번째 라인 이후가 아닌 숫자 인 경우에만 반환해야한다고 생각합니다.
function! CurrentDiff()
if &diff
let num_diff = 0
let winview = winsaveview()
let pos = getpos(".")
let moved = 1
while moved
let startl = line(".")
keepj sil exe 'normal! [c'
let moved = line(".") - startl
if moved
let num_diff+=1
endif
endwhile
call winrestview(winview)
call setpos(".",pos)
return num_diff
endif
endfunction
다시 말하지만, 내 상태 표시 줄에서 동작하는 것으로 보이며 커서의 움직임에는 영향을주지 않습니다. 변경 사항이 버퍼에서 /로 복사됨에 따라 숫자가 제대로 업데이트됩니다.
일단 문제가 해결되면 Vim 웹 사이트에서 플러그인으로 업로드하는 것이 좋습니다.
* hunks * (또는 vim이 호출하는 * 변경 사항 *)의 개수를 의미합니까? –
예, 변경 횟수입니다. –