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

sam*_*per 16 vim diff text vimdiff text-editor

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

vimdiff file1 file2
Run Code Online (Sandbox Code Playgroud)

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

?????????????????
?foo    ?-------?
?bar    ?bar    ?
?grue   ?-------?
?~      ?~      ?
?~      ?~      ?
?????????????????
Run Code Online (Sandbox Code Playgroud)

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

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

另一种方法是使用diff put命令dp.但是,如果在执行此操作后我决定我不打算这样做,我无法通过按u来撤消它,因为我的光标仍在file1中,而u命令将撤消对file1的最新更改,而不是最多最近更改为file2.因此,我必须使用Ctrl + wlCtrl + ww将光标移动到file2的窗口,然后u.

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

JD *_*ias 13

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

nmap du :wincmd w<cr>:normal u<cr>:wincmd w<cr>
Run Code Online (Sandbox Code Playgroud)


Con*_*ean 13

取决于你的工作流程如何,但我通常使用do获取差异到我的文件,而不是dp将差异放入另一个.这样你可以像往常一样使用uctrl+ r.

由于diff导航命令在任一文件中都是相同的,所以你应该很高兴!

下一个差异: ]c

prev diff: [c