作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Vim 中比较两个文件时,是否可以显示更改的总数?我想,这相当于计算折叠次数,但我也不知道该怎么做。
理想情况下,我想要一条消息,内容类似于“更改 1 个,共 12 个”,该消息会在我使用 ]c
循环更改更改时更新。
我取得了巨大成功,让我办公室的一些成员开始接受 Vim 的魅力,但 Vimdiff 一直是一个令人头疼的问题。
最佳答案
好吧,这是我自己能想到的最好的办法。此函数从当前缓冲区的顶部开始,并使用 ]c
运动来移动更改,直到 ]c
不再产生效果。它返回更改的数量(如果光标不是差异缓冲区,则返回 0
)。
function! CountDiffs()
let winview = winsaveview()
let num_diffs = 0
if &diff
let pos = getpos(".")
keepj sil exe 'normal! G'
let lnum = 1
let moved = 1
while moved
let startl = line(".")
keepj sil exe 'normal! [c'
let moved = line(".") - startl
if moved
let num_diffs+=1
endif
endwhile
call winrestview(winview)
call setpos(".",pos)
endif
return num_diffs
endfunction
它似乎工作正常,并且在包含在我的状态行中时不会对性能造成明显影响。
至于查找当前更改的“数量”,这里有一个函数,它使用向后的[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 网站上。
关于vim - 如何在Vim的diff模式下显示变化总数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11046475/
我是一名优秀的程序员,十分优秀!