比较文件和更新源代码存储库时,我喜欢使用vimdiff。要将一个文件所做的更改复制到另一个文件,我通常使用这样的键序列:-

Shift + V (select line)
k or j; { or }; Up or down arrow keys (select more lines)
y  (copy selected lines)
Ctrl + w, left/right arrow (move to other pane)
p (paste lines)


Vim作为键盘快捷键的主键,一定要具有执行相同任务的更简便方法。有一个吗?您使用什么来手动更新源代码更改?

评论

感谢您将我对“这不是应该的”的含糊的理解引入一个有意义的问题。得出的答案是我很久以前就应该学到的。

您问题的最佳答案在这里:stackoverflow.com/questions/5288875/…

#1 楼

您需要do(差异获取)和dp(差异投放)。这是此上下文中其他有用的正常模式命令的一小部分列表。

]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
zo               - unfold/unhide text
zc               - refold/rehide text
zr               - unfold both files completely
zm               - fold both files completely


注意:
dodp都可以工作在正常模式下但不是在视觉模式下,仅在一个块上或仅在一个块下的一行上。
在视觉模式下选择文本行时,必须使用常规命令



:'<,'>diffget

:'<,'>diffput

另请参阅:h copy-diffs

:diffupdate将重新扫描文件以进行更改。

评论


真正。最初,整个(连续的)块被复制,因此我感到很困惑。这样,再加上diff模式自动隐藏相同的行,我发现自己在思考两个窗格中的每个动作之前,想着“到底发生了什么?”。假设您已更改其中一个文件的缩进;然后我想一切都会转移。对于更细粒度的控制(即,视觉选择),我发现需要完整的命令:[range] diffget和:[range] diffput。

– Alex Leach
2012年10月24日15:03

您可以将视觉模式与diffget和diffput一起使用:①进入视觉模式并标记一些文本/行。 ②然后输入:diffput将所选行推入另一个文件,或输入:diffget从另一个文件获取所选行。

–erik
13-10-8在17:46

感谢您对将光标放在下方的评论-我从上方尝试过,但是没有用

–hgolov
2015年5月1日下午6:54

嗨,有人知道对于仅一行来说,是否有等效的“做”(获得差)?假设您有一个不同的代码块(多于一行),用光标在这些代码的任何一行“执行”,仅这些代码下面的那一行将获得整个代码块的差异---但是我只想获得一个线的差异。每次我必须在视觉上选择此行,然后选择“ diffget”,这有点乏味...

–智慧
15年5月28日在9:37

重要的是要注意,撤消命令仅在已更改的缓冲区中起作用,因此,如果您使用dp并改变了主意,则需要切换到另一个缓冲区来撤消。

–Random832
15年6月11日在18:10