vimdiffで変更をコピーする推奨方法は何ですか?


117

ファイルを比較し、ソースコードリポジトリを更新する場合、vimdiffを使用します。1つのファイルから行われた変更を他のファイルにコピーするには、通常、次のようなキーシーケンスを使用します。

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には、この同じタスクを実行する簡単な方法が確実にあるはずです。あるの?ソースコードの変更を手動で更新するには何を使用しますか?


2
「これは本来あるべきことではない」という漠然とした感覚を有意義な質問に入れてくれてありがとう。引き出される答えは、私がずっと前に学んだはずのことです。
カレブ

1
あなたの質問に対する最良の回答はこちらです:stackoverflow.com/questions/5288875/…–
erik

回答:


181

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

注:ブロック上または通常モードではブロック下の1行だけで、ビジュアルモードではない場合、
両方dodp機能します。ビジュアルモードでテキストの行を選択するときは、通常のコマンドを使用する必要があります

  • :'<,'>diffget そして
  • :'<,'>diffput

も参照してください:h copy-diffs

:diffupdate ファイルの変更を再スキャンします。


4
本当です。(連続した)ブロック全体がコピーされるため、最初はかなり混乱しました。これは、diffモードの同一行の自動非表示とともに、両方のペインでそれぞれの動きをトリプルチェックする前に、「一体何が起こったのか」と考えていたことに気づきました。いずれかのファイルのインデントを変更したとします。その後、すべてが移動することを想像します。より細かい制御(すなわちビジュアル選択)のために、私は完全なコマンドことがわかった:[range]diffgetとは:[range]diffput必要とされています。
アレックスリーチ

8
あなたは一緒にビジュアルモードを使用することができますdiffgetし、diffput:①ビジュアルモードに入り、いくつかのテキスト/行をマーク。②次に、入力:diffputして選択した行を他のファイルにプッシュするか、選択した行を他のファイル:diffgetから取得します。
エリック

6
こんにちは、JUST 1行に "do"(差を取得)に相当するものがあるかどうか誰もが知っていますか?異なるコードブロック(複数行)があり、これらのコードの任意の行でカーソルを「do」すると、これらのコードの下の行だけがコードブロック全体の違いを取得するとします---私はちょうど1つの行の違いを取得したいです。この行を視覚的に選択するたびに、「diffget」が続き、少し面倒です
...-

12
元に戻すコマンドは、変更されたバッファでのみ機能することに注意することが重要です。そのため、気を使っdpて変更した場合は、元に戻すために他のバッファに切り替える必要があります。
Random832

1
@wiswit:V行全体を選択し、do現在のvim(8.0)の特定の行をコピーして、それが価値があるかどうかを確認します。
ダニーザウアー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.