使用vim-fugitive的当前和以前版本的差异

时间:2013-05-28 22:37:38

标签: vim vim-fugitive

我知道:Glog将使用当前缓冲区中文件的所有版本填充quickfix列表,并且我可以在这些文件上点击<enter>以查看该特定版本的文件,但是有一种简单的方法可以查看特定版本与先前版本的差异(以便轻松查看已更改的内容)?

编辑:我所追求的是在vim的垂直差异中看到这些变化中的每一个:git log -p -- path/to/file.txt

10 个答案:

答案 0 :(得分:11)

这就是我使用的:

:Gdiff [revision]

有关其他选项,请参阅:help Gdiff(垂直与水平分割等)。

例如:

:Gdiff HEAD

或者如果您有修订号(即:aaffdfdstsdgssetds):

:Gdiff aaffdfds

答案 1 :(得分:3)

我相信它很简单:

:vert diffsplit #

答案 2 :(得分:3)

无法逃避做我想要的事情(它要么不做或者我不知道如何使用它),但我确实找到了提供所需行为的插件:https://github.com/kablamo/vim-git-log

(它不会在quickfix列表中显示差异,但在完整大小的缓冲区中,这是正常的)

答案 3 :(得分:2)

首先,打开要与之区分的文件。

如果提交了更改,请输入:Gdiff HEAD~1 如果更改 NOT 已提交,请输入:Gdiff HEAD

答案 4 :(得分:1)

使用:Glog时,您只需在<cr>开始的行上按diff --git即可。它将打开差异。您可能还想查看:Gdiff。你可能想看看Drew Neil的vimcastsThe Fugitive Series

如需更多帮助,请参阅

:h fugitive
:h :Glog
:h :Gdiff

答案 5 :(得分:1)

您可以按照以下步骤实现此目的:

  1. 将焦点更改为quickfix窗口并导航到与您感兴趣的提交相对应的行。
  2. 在行中找到提交哈希并将其拉出(哈希现在位于0寄存器中。
  3. 关闭quickfix缓冲区,然后执行:Gdiff <C-r>0
  4. 这应该激发适当的差异。

    您可以通过将此映射添加到.vimrc文件来自动执行第2步和第3步

    nnoremap <Leader>gd /\.git<CR>wwwyw<Esc>:cclose<CR>:Gdiff <C-r>0<CR>
    

    请注意,映射假设您的光标位于行的开头(.git//部分之前)。

答案 6 :(得分:0)

查看提交差异的一种方法是:

:Gedit [revision]

答案 7 :(得分:0)

要使用以前的版本进行差异,请按以下步骤操作:

  1. 使用Glog
  2. 导航至所需版本
  3. 键入C,打开提交
  4. 转到包含diff --git a/you/file b/you/file的行,然后按<cr>
  5. 此外,要将先前版本与 index (工作版本)中的版本区分开来,您可以这样做:

    1. 使用Glog
    2. 导航至所需版本
    3. 在没有参数的新窗口中使用Gdiff完成!
    4. 没有参数的

      Gdiff会将当前缓冲区与索引中的缓冲区区分开来,这正是您想要的

      您还可以考虑使用插件vim-unimpaired,它提供了两个地图]q[q来导航quickfix列表。 (还有]Q[Q

答案 8 :(得分:0)

我编写了一个函数,允许您对当前文件的先前版本进行区分。我使用它来查看工作副本和修订版“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

你可以这样调用这个函数(下面的例子反对第三个版本):

:call Diffrev(2)

答案 9 :(得分:0)

尝试compilerOptions.lib。这将以左右模式显示当前文件的差异。