gpt4 book ai didi

vim - 如何在Vim的diff模式下显示变化总数?

转载 作者:行者123 更新时间:2023-12-02 03:21:32 24 4
gpt4 key购买 nike

在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com