使用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

您可以通过以下步骤实现:

  • 将焦点更改为quickfix窗口,并导航到与您感兴趣的提交对应的行
  • 在行中找到提交散列并将其拖动(散列现在位于
    0
    寄存器中)
  • 关闭quickfix缓冲区,然后执行
    :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
    ,打开提交
  • 转到行contains
    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