如何在 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-----+
b
是dp
的目标,所以在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-----+
我已经开始使用 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-----+
b
是dp
的目标,所以在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-----+