该命令:Gdiff相当于git diff在该文件上运行.
什么相当于git diff --staged或git diff --cached?
Fli*_*imm 29
我找到了一种方法来做到这一点.运行:Gstatus,你应该得到一个包含如下内容的窗口:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: example.txt
#
Run Code Online (Sandbox Code Playgroud)
向下滚动到暂存文件example.txt,然后按Shift+ D.这将打开一个差异视图,比较HEAD中的内容和索引中的内容.你会注意到底部的栏上有两个文件名都是特殊的逃犯文件名.
此外,在Gstatus预览窗口中,您可以按g?,这将列出当前上下文中有效的所有映射.
Cec*_*rry 19
尽管vim-fugitive不不用于提供直接的类似物git diff --staged或git diff --cached,它不为任意的输出通过管道提供的通用Vim命令git的命令到只读的Vim缓冲器::Git!.
在我们开始之前,让我们明确地重申一下这个问题.git diff --staged并且git diff --cached是同一基础操作的同义词:将索引的内容(所有分阶段更改的集合)与HEAD的内容(当前分支的最新提交)进行区分,通常用于在提交之前查看更改.所述问题随后变为:
审核所有阶段性变更的最有效方法是
vim-fugitive什么?
应该清楚的是,目前接受的自我回答未能解决这个问题.排名第二的自我回答并不是更好.
:Gstatus绑定仅适用于当前行上的文件,因此无法根据定义用于查看所有分阶段更改.此外,:Gstatus D绑定甚至不会检查当前行上文件的所有分阶段更改.它只区分该文件的索引和工作树副本,而不是区分该文件的索引和最近提交的副本(这是一个完全不同的野兽).
:Gdiff HEAD同样不适用.它仅区分对应于当前缓冲区的文件的最近提交和工作树副本.:Gdiff没有参数等同于:Gstatus D绑定,再次区分该文件的索引和工作树副本.两者都没有评论所有上演的变化.
通过对后一个答案的评论,emaniacs最接近一个有效的解决方案:
:Git diff --staged
Run Code Online (Sandbox Code Playgroud)
现在我们接近真相了!
:Git将传递的git命令的输出传递给当前的外部寻呼机,允许对Vim外部的所有分阶段变化进行审查.但是有一个问题:Vim的外部.这意味着没有Vim绑定,缓冲区或语法突出显示.理想情况下,我们更喜欢使用只读Vim缓冲区语法来突出显示输出git diff --staged.我们可以这样做吗?
我们可以,或蒂姆波普不是Vim教皇.该!的-suffixed变种:Git做到了这一点,允许所有的liesurely回顾上演的变化中完成的变化差异基于VIM-语法高亮Vim的:
:Git! diff --staged
Run Code Online (Sandbox Code Playgroud)
是啊.这真是太棒了.
但是,让我们更进一步.在历史悠久的懒惰传统的传统中,让我们定义一个:Greview封装此操作的新Vim命令和一个<leader>gr运行此命令的新绑定.只需将以下内容存入您的.vimrc:
command Greview :Git! diff --staged
nnoremap <leader>gr :Greview<cr>
Run Code Online (Sandbox Code Playgroud)
假设<leader>是,,审查所有阶段性更改减少到,gr.它无法得到任何Vimmier.
Fli*_*imm 11
:Gdiff HEAD
Run Code Online (Sandbox Code Playgroud)
Gdiff采取修改论点.所以你可以通过它HEAD.这不等同于git diff --staged,但它可以起到类似的作用.