16

如果在命令提示符下,我运行

vimdiff file1 file2

我得到一个并排打开两个文件的 vim 实例。假设文件中的文本如下所示(file1 在左侧,file2 在右侧):

╔═══════╤═══════╗
║foo    │-------║
║bar    │bar    ║
║grue   │-------║
║~      │~      ║
║~      │~      ║
╚═══════╧═══════╝

现在假设我的光标位于“foo”的“f”上,并且我希望将 file1 的第一行复制到 file2 的第一行。

一种方法是使用v$ y选择并拉出(复制)该行,然后使用Ctrl+wl将光标移动到 file2 的第一行,然后键入p粘贴复制的行。如果我这样做,然后我决定我真的不想这样做,我可以按u撤消我在 file2 中执行的粘贴命令。

另一种方法是使用 diff put 命令 dp。但是,如果在这样做之后我决定我不是故意的,我不能简单地通过按u来撤消它,因为我的光标仍在 file1 中,并且u命令将撤消对 file1 的最新更改,而不是最最近对 file2 的更改。因此,我必须使用Ctrl+wlCtrl+ww将光标移动到 file2 的窗口,然后u

所以,我的问题是:在我如上所述使用dp之后,是否有任何简单的方法可以让我撤消它而无需将光标移到另一个文件的窗口?

4

3 回答 3

13

取决于您的工作流程如何进行,但我通常使用do将差异获取到我的文件中,而不是dp将差异放入另一个文件中。这样你就可以像往常一样使用uand ctrl+了。r

由于 diff 导航命令在任何一个文件中的工作方式都相同,所以你应该很高兴!

下一个差异:]c

上一个差异:[c

于 2011-11-24T00:25:11.897 回答
13

实际上没有命令,但你可以映射你自己的。将以下内容放入您的 vimrc 中,然后使用du执行diff undos

nmap du :wincmd w<cr>:normal u<cr>:wincmd w<cr>
于 2009-06-03T18:15:33.253 回答
1

比较文件时,我喜欢使用vimdiffor vim -d。一种复制更改的方法vimdiff是:

]c               - advance to the next block with differences
[c               - reverse search for the previous block with differences
do (diff obtain) - bring changes from the other file to the current file
dp (diff put)    - send changes from the current file to the other file

这就像:

:diffget the same with do
:diffput the same with dp
于 2016-10-19T07:02:15.143 回答