vimdiff
对于比较文件非常方便。但是,我经常在行长且行内差异相对较小的文件上使用它。
vimdiff 将正确突出一行内的差异(整行粉红色,不同字符红色)。在这些情况下,能够跳转到行内的下一个差异会很好。
您可以跳转到“下一个差异”( ]c),但这将跳转到下一个有差异的行。
有没有办法转到当前行内的下一个不同字符?
如何让 vimdiff 显示被区分的文件的全部内容?我希望差异的颜色突出显示,但仍希望查看整个文件,即相同的部分。
我目前正在使用 MacVim (Snapshot 64)“Split Diff by...”菜单选项。
该文件是 Djangosettings.py
从 1.3.1 版到 1.4 版的新文件。
我知道两个基本命令
但是这两个命令会写入整个块,在 MacVim 中是紫色的亮点。
如果您查看第 2 个块,您可以看到第 2 行和第 3 行只有 2 个不同的单词:mysite
and hobbes3
。我只想替换每行而不是整个块。
那么有什么命令可以将 dodo和dpper line替换为与整个块相反的命令,还是我必须手动输入它?
额外问题:我注意到一旦我手动编辑一个块,我就会失去紫色突出显示。如何在不重新打开文件的情况下再次“刷新”差异以包含亮点?
请尽量保留 Vim-general 的答案,而不是 MacVim-specific。
我最近在 Windows 7 机器上安装了 7.4 版本的 gVim。尝试从 Windows 资源管理器上的上下文相关菜单中区分两个文件,我不断收到错误消息:
E810:无法读取或写入临时文件
E97:无法创建差异
两个选中的文件在双窗格 gVim 视图中打开,编辑器似乎处于 diff 模式,但实际差异并未突出显示。
该%TEMP%
和%TMP%
环境变量会以一个有效的目录名。
在常规 gVim 会话中打开文件并:diffthis
在命令提示符中键入时,我得到相同的响应。
这曾经在 Vim 7.3 中正常工作,但看起来在 v7.4 中发生了一些变化。
如何区分这两个文件?
我将一个系统从 Nagios 2 升级到 Nagios 3,现在我正在比较新旧配置文件的一些差异。
配置文件有重大更改,我不想对整个文件执行差异,因为 vimdiff 向我展示了太多不相关的差异,并且无法处理行首的#
注释等。
我可以使用 vim 或类似 vimdiff 的功能对两个不同文件中的两个特定部分执行差异吗?
例如,我只想区分看起来像这样的行:
# Define a service to check the load on the local machine.
define service{
use local-service ; Name of service template to use
host_name localhost
service_description Blah Blah
check_command Blah Blah
}
Run Code Online (Sandbox Code Playgroud) 我使用 vimdiff 作为我的 git difftool。
假设我已经更改了十二个文件。问题是有时我会在运行git diff
第四个或第五个文件时看到一些我想编辑/更改的内容。有时我需要在此之外再做一些改变。问题是我不能只是:qa
回到黑客攻击,因为在 vimdiff 中弹出了六到七个不同的差异。:qa
每次我想中止 git diff 时都不查看所有这些文件,这真的很乏味。
有什么方法可以将 vimdiff 设置为 git 的 difftool,以便所有差异都在同一个 vim 实例中打开,例如在单独的选项卡中?
我让 Git 在我的工作笔记本电脑(Windows 7)上的 Powershell 环境中使用 Vim。当我提交或使用我的git vimdiff
别名时,它会弹出 Vim 。
我在 Cygwin 下尝试了相同的设置(本质上是一个 Unix 人)但是当我输入git commit
or 时git vimdiff
,Vim 没有弹出;看起来,虽然,Git 正在等待 Vim,因为该操作永远不会完成,直到我Ctrl- C(之后需要一分钟左右的时间才能恢复)。我可以使用内联提交消息 ( git commit -m "I would rather type this in Vim"
)进行提交,并且可以使用vim
和从终端启动 Vim/Vimdiff vimdiff
。我在多个地方将我的编辑器设置为 Vim:
$ echo $EDITOR
vim
$ git config --get core.editor
vim
Run Code Online (Sandbox Code Playgroud)
(一开始我并没有在Git中明确设置,只是在环境变量中设置了,还是出现了同样的问题。)
看来我在 Cygwin 中运行 Windows Git。作为 Cygwin 的新手,当我第一次问这个问题时,我没有意识到这一点。我可以看到这可能会如何导致问题,但是在玩了之后我还没有能够解决它。
有没有人见过这个问题?知道如何修复它吗?
我正在使用VCSCommand插件。
我通过调用 Vim 内部的 VimDiff 实用程序:VCSVimDiff
。
我在我的vimrc
:
if &diff
set t_Co=256
set background=dark
colorscheme peaksea
else
colorscheme molokai
endif
Run Code Online (Sandbox Code Playgroud)
它在我vimdiff
从控制台调用时有效,但在我使用 VCS 从 Vim 调用时无效。
这是插件问题还是vimrc
缺少配置?
我使用的是 Linux Mint 17 64 位。刚刚清除git
并重新安装apt
。已删除~/.gitconfig
。我在所谓的全新安装后所做的唯一配置是(在存储库内)
git config diff.tool vimdiff
Run Code Online (Sandbox Code Playgroud)
然后我跑
git difftool HEAD:switch-monitor.sh master:switch-monitor.sh
Run Code Online (Sandbox Code Playgroud)
并得到
fatal: cannot exec 'git-difftool--helper': Bad address
external diff died, stopping at HEAD:switch-monitor.sh.
Run Code Online (Sandbox Code Playgroud)
因此,我删除了相关行.git/config
并再次尝试该命令,果然内置的基本git diff
工作正常。
我还尝试了本教程中的说明:http://technotales.wordpress.com/2009/05/17/git-diff-with-vimdiff/
这会导致略有不同但相似的错误。我将以下内容放入新的~/.gitconfig
[diff]
external = git_diff_wrapper
[pager]
diff =
Run Code Online (Sandbox Code Playgroud)
git_diff_wrapper
并在 my 上放置一个可执行文件PATH
,然后运行
git diff HEAD:switch-monitor.sh master:switch-monitor.sh
Run Code Online (Sandbox Code Playgroud)
并得到
fatal: cannot exec 'git_diff_wrapper': Bad address
external diff died, stopping at HEAD:switch-monitor.sh.
Run Code Online (Sandbox Code Playgroud)
不过好像和内容没什么关系git_diff_wrapper
。我放置了
git config diff.tool …
Run Code Online (Sandbox Code Playgroud)