当我运行git difftool --tool-help或 时git mergetool --tool-help,我看到:
vimdiffvimdiff1vimdiff2vimdiff3这些不同的“版本”是什么?我假设他们都以不同的选项启动 Vim,但是有哪些选项呢?它们在任何地方都有记录吗?
我已经阅读了Vimdiff并查看与Vimdiff的差异以及使用诸如"vimdiff multiple","vimdiff git","vimdiff命令"等内容进行各种谷歌搜索.
当使用do或diffg时,我得到错误"在diff模式下超过两个缓冲区,不知道使用哪个缓冲区".
当使用diffg v:fname_in时,我得到"v:fname_in没有匹配的缓冲区".
从vimdiff文档:
:[range] diffg [et] [bufspec]
修改当前缓冲区以撤消与另一个缓冲区的差异.如果给出[bufspec],则使用该缓冲区.如果[bufspec]引用当前缓冲区,则没有任何反应.否则,仅当diff模式中有另一个缓冲区时才有效.
和更多:
当'diffexpr'不为空时,Vim会计算得到所提到格式的diff文件.这些变量设置为使用的文件名:
v:fname_in原始文件
v:fname_new同一文件的新版本
v:fname_out生成的diff文件
所以,我需要获取bufspec的名称,但是没有设置默认变量(fname_in,fname_new和fname_out).
我通过终端在linux机器上运行命令git mergetool.
[编辑]一个产生更多问题的部分解决方案.我在缓冲区的底部使用了"filename".它只有一半的答案,因为偶尔我得到一个文件不存在错误.我相信它一直是"不存在"的文件的远程版本.我怀疑这与git和索引有关.
你如何获得的bufspec值一致,而使用Vimdiff可以通过混帐合并工具?
在Vimdiff中,我知道我可以使用"do"或"dp"将更改从一个文件移动到另一个文件......但这些是针对个别更改的.如果我必须撤消特定范围/选择内的所有更改(比如撤消对特定功能的所有更改,但保持其余部分不变),有没有办法一次性完成?
我对此很陌生,所以对基本问题表示歉意。
我使用的是Ubuntu环境。我已经安装了git。我将vimdiff设置为合并工具。
我正在测试环境,但遇到问题。
我在文件中创建了冲突readme.txt。当我尝试从分支develop合并到master时,显然会发生冲突。正如预期的那样,添加了一些“标记字符”readme.txt来指示冲突发生的位置。因此,下一步是调用git mergetool启动vimdiff。
到目前为止,一切都按预期进行,vimdiff现已启动。但后来,我决定退出vimdiff而不做任何更改。我想将我的更改“推迟”到另一个时间。因此,我按<ESC>,然后按:qa!,认为这将停止合并过程。不幸的是,事实并非如此。看起来合并现在被认为已解决并成功,并且readme.txt文件虽然没有更改,并且包含冲突标记,但现在已准备好提交。
现在回答我的问题。如何终止git mergetool通话、退出vimdiff并重新开始,就像我没有拨打电话一样?
谢谢。
我想在python中复制它:
gvimdiff <(hg cat file.txt) file.txt
Run Code Online (Sandbox Code Playgroud)
(hg cat file.txt输出最近提交的file.txt版本)
我知道如何将文件传递给gvimdiff,但它不会接受另一个文件:
$ hg cat file.txt | gvimdiff file.txt -
Too many edit arguments: "-"
Run Code Online (Sandbox Code Playgroud)
进入python部分......
# hgdiff.py
import subprocess
import sys
file = sys.argv[1]
subprocess.call(["gvimdiff", "<(hg cat %s)" % file, file])
Run Code Online (Sandbox Code Playgroud)
当子过程被称为它仅仅传递<(hg cat file)到gvimdiff作为文件名.
那么,有没有办法像bash那样重定向命令?为简单起见,只需捕获一个文件并将其重定向到diff:
diff <(cat file.txt) file.txt
Run Code Online (Sandbox Code Playgroud) 我正在努力学习使用vimdiff.目前我想出了如何从缓冲区到另一个缓冲区(使用do)获取一个diff块,但我现在愿意做的是简单地在另一个缓冲区中获取一个块的一行(或某些行).
该vimdiff文件说:
:[range]diffget
Run Code Online (Sandbox Code Playgroud)
但我无法想象如何使用正确的范围参数来简单地将我从缓冲区中的行复制到另一个缓冲区.
我正在考虑以一种并不真正适合的方式使用子模块,但我的目标是为开发人员简化一些事情。我有一个项目基本上仅由子模块组成 - 其中 4 个。重要的是它们彼此独立,否则我只会制作一个大的回购协议。从父存储库中,我可以通过执行 立即查看所有子模块的差异git diff --submodule=diff。
但我真正想要的是相当于git difftool -d但同时适用于所有子模块。理论上 difftool 应该与该--submodule=diff标志一起使用(因为git difftool具有与 diff 相同的选项),但事实并非如此。有想法吗?
我正在使用 CLI 合并工具vimdiff,而不是逐行输入:diffg RE每个更改来选择远程版本,有没有办法可以将整个文件的远程版本作为目标合并?
我在.gitconfig中将Vim配置为git difftool
[diff]
tool = vimdiff
Run Code Online (Sandbox Code Playgroud)
如果N个文件有变化,我必须关闭vim(:qa)才能看到下一个差异.
如何在不退出vim的情况下导航到下一个/上一个差异?
有时在编辑三个文件时vimdiff我想将一个文件从一个文件复制到另外两个文件.通常这将完成如下:
:diffput 2
:diffput 3
Run Code Online (Sandbox Code Playgroud)
但是,:help diffput这说:
*:diffpu* *:diffput* *E793*
:[range]diffpu[t] [bufspec]
Run Code Online (Sandbox Code Playgroud)
这让我很好奇是否bufspec允许您指定多个缓冲区.我尝试使用文档,然后猜测,但没有运气.
:help bufspec
:diffput 2,3
:diffput 2 3
Run Code Online (Sandbox Code Playgroud)
是否可以在diffput命令中指定多个缓冲区?