使用 vimdiff 复制更改的推荐方法是什么?

Ale*_*ach 146 vim diff

在比较文件和更新源代码存储库时,我喜欢使用 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)
Run Code Online (Sandbox Code Playgroud)

Vim 作为键盘快捷键的大师,肯定应该有更简单的方法来执行相同的任务。有吗?您使用什么来手动更新源代码更改?

Mar*_*rco 233

do(diff 获得) 和dp(diff put) 是您所需要的。以下是此上下文中其他有用的普通模式命令的小列表。

]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
Run Code Online (Sandbox Code Playgroud)

注意:
无论dodp工作,如果你是一个块或正常模式下块只有一个行上而不是在视觉模式。在视觉模式下选择文本行时,必须使用普通命令

  • :'<,'>diffget
  • :'<,'>diffput.

另见:h copy-diffs

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

  • 需要注意的是,undo 命令只会在被改变的缓冲区中起作用,所以如果你使用 `dp` 并改变主意,你需要切换到另一个缓冲区来撤消。 (16认同)
  • 可以与`diffget`和`diffput`一起使用可视化模式: ①进入可视化模式,标记一些文本/行。② 然后输入`:diffput` 将选中的行推送到另一个文件或输入`:diffget` 从另一个文件中获取选中的行。 (8认同)
  • 嗨,有没有人知道只有一行是否有相当于“做”(获得差异)的东西?假设您有一个不同的代码块(不止一行),在这些代码的任何一行中使用光标“做”这些代码下面的行将获得整个代码块的差异---但是我只想获得一条线的差异。每次都要视觉上选这行,后面跟着“diffget”,有点乏味…… (7认同)
  • 真的。我发现它最初很混乱,因为整个(连续)块被复制。那,连同 diff 模式自动隐藏相同的行,我发现自己在想“到底发生了什么?”,然后在两个窗格中对每个移动进行三重检查。假设您更改了其中一个文件的缩进;然后我想一切都会被转移。对于更细粒度的控制(即视觉选择),我发现需要完整的命令 `:[range]diffget` 和 `:[range]diffput`。 (4认同)