假设我在提交之前生成了我的项目的差异,比如使用svn。为整个项目生成一个差异文件是在提交之前审查更改的非常好的方式。然而,有时候我希望在不重新打开每个文件的情况下编辑这些更改,只需简单地编辑差异并重新应用即可。因此,我已经制作了这样的快捷键(我已设置svn diff使用带有相当数量的周围行的统一格式):
map scde :w! tmpdiff<cr>:!svn revert -R .<cr>:!patch -p0 <tmpdiff<cr>
它可以工作,但只能部分地编辑添加的行,如果您将某些行标记为已删除或想要添加另一行,则会遇到一些问题,因为指定的差异范围与差异中实际存在的文本不匹配。对于简单的更改(如添加一行),可以更新它们,但如果进行更复杂的更改,则会很麻烦并且很快变得复杂。是否有一种方法可以编辑差异以便范围会自动正确更新?我发现emacs具有此类diff模式(但我尚未尝试过),但是我无法找到使用vim满足我的需求的解决方案。也许有人可以给出一些建议?