現在MacVim(Snapshot 64)の[Split Diff by ...]メニューオプションを使用しています。
ファイルはDjangoのmy settings.py
バージョン1.3.1からバージョン1.4の新しいファイルに。
2つの基本的なコマンドを知っています
しかし、これらの2つのコマンドはブロック全体を書き込みます。MacVimでは紫色のハイライトです。
2番目のブロックを見ると、2行目と3行目から、2つの単語だけが異なることがわかります:mysite
とhobbes3
。ブロック全体ではなく行ごとを置き換えたいだけです。
だから置換するコマンドは何ですか do そして dp ブロック全体ではなく、行ごとに手動で入力する必要がありますか?
ボーナス質問:ブロックを手動で編集すると、紫色の強調表示が失われることに気付きました。ファイルを再度開かずに、ハイライトを含めるためにdiffをもう一度「更新」するにはどうすればよいですか?
MacVim固有ではなく、Vim全般の回答を保持するようにしてください。
これを行うにはいくつかの方法があります。
:diffget
を使用します。たとえば、V
を使用して行の範囲を視覚的に選択し、:diffget
と入力できます。:diffput
を使用します。たとえば、現在の行を他のバッファに入れるには、:.diffput
と入力します。Y
を使用してそれらをヤンクし、カーソルを宛先バッファーに移動して、p
で目的の場所に配置します。またはP
を使用して、不要な行を削除します。"0p
と入力します。これは常に最新のヤンクのテキストを含む0(ゼロ)レジスターを使用します。ディスプレイを「リフレッシュ」して適切なハイライトを表示するには、:diffupdate
または単に:diffu
を実行します。場合によってはそれだけでは不十分で、更新を完了するためにカーソルを他のウィンドウに移動する必要があります。
差分のコピーについての詳細を読むことができます
:help copy-diffs
また、差分の特定の瞬間に1行を変更したかった。簡単なマップを作成して、vimrcファイルに入れました。
nnoremap <silent> <leader>dp V:diffput<cr>
nnoremap <silent> <leader>dg V:diffget<cr>
Dgの代わりにdoを使用することもできますが、私は[o] btainの代わりに「diffget」を考えることに慣れています。
おまけとして、別の単純なマップを2回使用します。
nnoremap <silent> <leader>df :call DiffToggle()<CR>
これで、dfはdiffmodeをオフ/オンにするので、オフにしてから再びオンにします。
そしてボーナスオプションは追加することです
nmap <silent> <leader>du :wincmd w<cr>:normal u<cr>:wincmd w<cr>
これにより、他のファイル/ウィンドウのタイプミスや不要な変更を元に戻すことができます。なぜなら、uの:undoは、現在のウィンドウの変更のみを元に戻すためです。