在vimdiff窗口之间复制行时撤消diff

时间:2009-06-03 14:16:22

标签: vim text diff text-editor vimdiff

如果在命令提示符下运行

vimdiff file1 file2

我得到一个vim实例,它有两个并排打开的文件。我们假设文件中的文本看起来像这样(file1在左边,file2在右边):

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

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

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

另一种方法是使用diff put命令dp。但是,如果在做完这个之后我决定我不打算这样做,我只能通过按来撤消它,因为我的光标仍在文件1中且命令将撤消对file1的最新更改,对file2的最新更改。所以我必须使用 Ctrl + wl Ctrl + ww 将光标移动到file2的窗口,然后 u

所以,我的问题是:在我使用上面的 dp 后,有没有简单的方法让我撤消它而不必将光标移动到另一个文件的窗口?

3 个答案:

答案 0 :(得分:13)

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

nmap du :wincmd w<cr>:normal u<cr>:wincmd w<cr>

答案 1 :(得分:12)

取决于你的工作流程如何,但我通常使用 d o 来获取我的文件中的差异,而不是 d p 将差异放入另一个。这样你可以像往常一样使用 u ctrl + r

由于diff导航命令在任一文件中的工作方式相同,所以你应该好好去!

下一个差异:]c

prev diff:[c

答案 2 :(得分:1)

比较文件时,我喜欢使用vimdiffvim -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