【发布时间】:2013-05-24 01:10:16
【问题描述】:
我知道:Glog 将使用当前缓冲区中文件的所有版本填充快速修复列表,并且我可以在这些上点击<enter> 以查看该特定版本的文件,但有没有简单的方法查看特定版本与以前版本的差异(轻松查看发生了什么变化)?
编辑:我所追求的是在 vim 的垂直差异中看到这些变化中的每一个:git log -p -- path/to/file.txt。
【问题讨论】:
标签: vim vim-fugitive
我知道:Glog 将使用当前缓冲区中文件的所有版本填充快速修复列表,并且我可以在这些上点击<enter> 以查看该特定版本的文件,但有没有简单的方法查看特定版本与以前版本的差异(轻松查看发生了什么变化)?
编辑:我所追求的是在 vim 的垂直差异中看到这些变化中的每一个:git log -p -- path/to/file.txt。
【问题讨论】:
标签: vim vim-fugitive
这是我用的:
:Gdiff [revision]
请参阅:help Gdiff 了解其他选项(垂直拆分与水平拆分等)。
例如:
:Gdiff HEAD
或者如果您有修订号(即:aaffdfdstsdgssetds):
:Gdiff aaffdfds
【讨论】:
我相信它很简单:
:vert diffsplit #
【讨论】:
无法做我想做的事(它要么不做,要么我不知道如何使用它),但我确实找到了提供所需行为的插件:https://github.com/kablamo/vim-git-log。
(它不会在快速修复列表中显示差异,而是在完整大小的缓冲区中,这没关系)
【讨论】:
vim-git-log 与six outstanding issues 处于休眠状态。 (最后一次提交:2013 年初。)它也像罪恶一样丑陋。唯一的其他选择是vimgitlog。在积极维护的同时,后者安装起来并不简单,并且(至少在我的机器上)从根本上被破坏了——大概是由于 not 在引擎盖下使用vim-fugitive。谁认为这是个好主意?所以,如果有人可以分叉并再次开始积极维护vim-git-log,我会很高兴。 请。
首先,打开你想要比较的文件。
如果更改已提交,请输入:Gdiff HEAD~1。
如果更改未提交,请输入:Gdiff HEAD。
【讨论】:
Glog
C,打开提交diff --git a/you/file b/you/file 的行并按<cr>
Glog
Gdiff,不带参数。 完成!
Gdiff 不带参数会将当前缓冲区与 index 中的缓冲区进行比较,这正是您想要的
您也可以考虑使用插件vim-unimpaired,它提供了两个地图]q 和[q 来导航快速修复列表。 (还有]Q和[Q)
【讨论】:
使用:Glog 时,您只需在diff --git 开头的行上按<cr>。它将打开差异。您可能还想查看:Gdiff。你可能想看看 Drew Neil 的 vimcasts、The Fugitive Series。
有关更多帮助,请参阅
:h fugitive
:h :Glog
:h :Gdiff
【讨论】:
<cr>)正是我想要的,但我没有得到差异,我只是得到了那个特定版本的整个文件。
diff --get a/somefile b/somefile。
:Glog。这会在 quickfix 列表中填充文件的版本列表。我在任何地方都没有看到diff --get 行……我一定是误解了你的指示。
:Glog -- %。这将(来自:h :Glog):为当前缓冲区加载所有“......以前的提交而不是以前的文件修订......”。这与:Glog 非常不同,后者将:“将当前文件的所有先前版本加载到快速修复列表中。”当缓冲区包含提交而不是文件修订时,您将看到 diff --get a/somefile b/somefile 行并且能够按照他的回答。
您可以通过以下步骤实现此目的:
0 寄存器中。:Gdiff <C-r>0。这应该会引发适当的差异。
您可以通过将此映射添加到您的 .vimrc 文件来自动执行第 2 步和第 3 步:
nnoremap <Leader>gd /\.git<CR>wwwyw<Esc>:cclose<CR>:Gdiff <C-r>0<CR>
请注意,映射假定您的光标位于行首(.git// 部分之前)。
【讨论】:
试试:vert Gdiff。这将以左右模式显示当前文件的差异。
【讨论】:
查看提交差异的一种方法是:
:Gedit [revision]
【讨论】:
我编写了一个函数,可以让您对比当前文件的先前版本。我用它来查看工作副本和修订“n”次之间的差异。
这是放入 .vimrc 的代码(需要 https://github.com/tpope/vim-fugitive):
"Diff the current file against n revision (instead of n commit)
function! Diffrev(...)
let a:target = @%
"check argument count
if a:0 == 0
"no revision number specified
let a:revnum=0
else
"revision number specified
let a:revnum=a:1
endif
let a:hash = system('git log -1 --skip='.a:revnum.' --pretty=format:"%h" ' . a:target)
execute 'Gdiff' . a:hash
endfunc
您可以像这样调用该函数(下面的示例与第 3 版不同):
:call Diffrev(2)
【讨论】: