如何在 vimdiff 中撤消 dp(或 :diffput),"u" 不起作用

How to UNDO dp (or :diffput) in vimdiff, "u" doesn't work

我已经开始使用 vimdiff 作为我的 git difftool,我不小心使用了命令 dp(diff put)将一些代码放入另一个文件。但是,按 u 不会撤消该操作,并且 vim 在底部显示“已经在最旧的更改”

撤消 do(差异获取)命令完美无缺,但奇怪的是 dp !!

有什么想法吗?

这里试图以更形象的方式解释这个问题。

$ echo 1 > a && echo 2 > b
$ vim -d a b

a是当前缓冲区:

+--------+--------+
| 1      | 2      |
|        |        |
|        |        |
|        |        |
+-[a]----+--b-----+

bdp的目标,所以在dp之后,当前缓冲区不变,u没用。更改的是目标,您无法撤消一个缓冲区中对另一个缓冲区的更改:

+--------+--------+
| 1      | 1      |
|     == dp =>    |
|        |        |
|        |        |
+-[a]----+--b*----+

b 必须成为当前 u 才能工作:

+--------+--------+
| 1      | 1      |
|        |        |
|        |        |
|        |        |
+--a-----+-[b]*---+ do <C-w>w to change window

u之后:

+--------+--------+
| 1      | 2      |
|        |        |
|        |        |
|        |        |
+--a-----+-[b]----+

现在,让我们回到开头,当前 a

+--------+--------+
| 1      | 2      |
|        |        |
|        |        |
|        |        |
+-[a]----+--b-----+

do后,改变的是当前缓冲区:

+--------+--------+
| 2      | 1      |
|     <= do ==    |
|        |        |
|        |        |
+-[a]*---+--b-----+

并且可以使用 u 撤消更改,而无需更改 windows:

+--------+--------+
| 1      | 2      |
|        |        |
|        |        |
|        |        |
+-[a]----+--b-----+