使用vim逃犯的当前版本和以前版本的差异
我知道使用vim逃犯的当前版本和以前版本的差异,vim,vim-fugitive,Vim,Vim Fugitive,我知道:Glog将用当前缓冲区中文件的所有版本填充快速修复列表,我可以点击这些文件上的,查看该特定版本的文件,但是有没有一种简单的方法可以查看特定版本与以前版本的差异(轻松查看发生了什么变化) 编辑:我所追求的是在vim中的垂直差异中看到这些变化:git log-p--path/to/file.txt我相信它很简单: :vert diffsplit # 这就是我使用的: :Gdiff [revision] 请参见:help Gdiff,了解其他选项(垂直与水平分割等) 例如: :Gdiff
:Glog
将用当前缓冲区中文件的所有版本填充快速修复列表,我可以点击这些文件上的
,查看该特定版本的文件,但是有没有一种简单的方法可以查看特定版本与以前版本的差异(轻松查看发生了什么变化)
编辑:我所追求的是在vim中的垂直差异中看到这些变化:
git log-p--path/to/file.txt
我相信它很简单:
:vert diffsplit #
这就是我使用的:
:Gdiff [revision]
请参见:help Gdiff
,了解其他选项(垂直与水平分割等)
例如:
:Gdiff HEAD
或者如果您有修订号(即:AAFFDFDSTGSSETDS):
使用
:Glog
时,只需在开始diff--git
的行上按
。它将打开差异。您可能还需要查看:Gdiff
。你可能想看看Drew Neil的
有关更多帮助,请参阅
:h fugitive
:h :Glog
:h :Gdiff
无法让逃犯做我想做的事情(它要么不做,要么我不知道如何使用它),但我找到了提供所需行为的插件:
(它不会在快速修复列表中显示差异,而是在一个完整大小的缓冲区中显示差异,这是正常的)查看提交差异的一种方法是:
:Gedit [revision]
首先,打开要与之区分的文件 如果更改已提交,请输入
:Gdiff HEAD~1
如果更改未提交,请输入
:Gdiff HEAD
您可以通过以下步骤实现:
0
寄存器中):Gdiff 0
.vimrc
文件,您可以自动执行步骤2和步骤3:
nnoremap <Leader>gd /\.git<CR>wwwyw<Esc>:cclose<CR>:Gdiff <C-r>0<CR>
nnoremap gd/\.gitwwyw:cclose:Gdiff 0
请注意,映射假定您的光标位于行的开头(在.git/
部分之前)。要与以前的版本不同,请执行以下步骤:
Glog
C
,打开提交diff--git a/you/file b/you/file
并按
Glog
Gdiff
。完成!Gdiff
会将当前缓冲区与索引中的缓冲区区分开来,这正是您想要的
你也可以考虑使用插件,它提供了两个映射“代码> >代码>和<代码> [Q > q>代码>和<代码> [q/COD> > > p>我写了一个函数,允许你对当前文件的前一版本进行修改。时光倒流
下面是放在.vimrc(需要)中的代码: 您可以这样调用函数(下面的示例与第三次修订版的差异):
:呼叫Diffrev(2)
试试:垂直Gdiff
。这将以左右模式显示当前文件的差异。您描述的行为(只需按
)这正是我想要的,但是我没有得到一个diff,我只是在那个特定的版本中得到了整个文件。确保你在线diff--get a/somefile b/somefile
。所以我在vim中打开一个文件,然后执行:Glog
。这会在快速修复列表中填充文件的版本列表。我没有看到diff--get
行在任何地方…我一定是误解了你的指示。仍然无法让它工作…找到了一个具有我想要的行为的插件:我相信@PeterRincker的答案取决于首先运行:Glog--%
。这将(从:h:Glog
):加载所有“…以前的提交,而不是以前的文件修订…”对于当前缓冲区。这与仅:Glog
非常不同,后者将:“将当前文件的所有以前的修订加载到快速修复列表中。”当缓冲区包含提交,而不是文件修订时,您将看到diff--get a/somefile b/somefile
行,并且能够按照他的答案进行操作。遗憾的是,它是休眠的。(上次提交:2013年初)。它也和sin一样丑陋。唯一的替代方法是。虽然积极维护,但后者的安装和维护并不简单(至少在我的机器上)从根本上说,这可能是因为没有在引擎盖下使用vim Sessional
。谁认为这是个好主意?因此,如果有人能再次主动维护vim git log
,我会很高兴。请相信。这确实有效,所以我投了赞成票,但Gdiff实际上更好,因为它直接与变更列表联系在一起。
nnoremap <Leader>gd /\.git<CR>wwwyw<Esc>:cclose<CR>:Gdiff <C-r>0<CR>
"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