Bagaimana saya hanya melakukan dp atau hanya melakukan garis, bukan seluruh blok di Vim diff?

28

Saat ini saya menggunakan opsi menu MacVim (Snapshot 64) "Split Diff by ...".

File tersebut adalah Django's my settings.pyfrom versi 1.3.1 ke file baru dari versi 1.4.

Tangkapan layar

Saya tahu dua perintah dasar

  1. do untuk "memperoleh" (dan mengganti) blok dari sisi lain.
  2. dp untuk "menempatkan" (dan mengganti) blok ke sisi lain.

Tetapi kedua perintah tersebut menulis seluruh blok, yang dalam MacVim adalah highlight ungu.

Jika Anda melihat blok ke-2, Anda dapat melihat bahwa dari baris 2 dan 3 hanya memiliki 2 kata yang berbeda: mysitedan hobbes3. Saya hanya ingin mengganti per baris bukan seluruh blok.

Jadi apa yang ada perintah untuk mengganti lakukan dodan dpper baris sebagai lawan dari seluruh blok atau apakah saya harus mengetiknya secara manual?

Pertanyaan bonus : Saya perhatikan bahwa begitu saya mengedit blok secara manual, saya kehilangan highlight ungu. Bagaimana cara "menyegarkan" diff lagi untuk memasukkan highlight tanpa membuka kembali file?

Silakan coba pertahankan jawaban Vim-general sebagai lawan dari spesifik-MacVim.

hobbes3
sumber

Jawaban:

30

Ada beberapa cara untuk melakukan ini.

  1. Pilih rentang garis di buffer tujuan yang ingin Anda dapatkan dari buffer sumber dan gunakan :diffget. Misalnya, Anda dapat memilih secara visual rentang garis V, lalu mengetik :diffget.
  2. Pilih rentang garis di buffer sumber yang ingin Anda masukkan ke buffer tujuan dan gunakan :diffput. Misalnya, untuk meletakkan baris saat ini ke buffer lain, ketik :.diffput.
  3. Gunakan yank dan pasang. Pilih rentang garis di buffer sumber yang ingin Anda salin ke buffer tujuan, tariklah menggunakan itu Y, pindahkan kursor ke buffer tujuan dan letakkan di tempat yang Anda inginkan patau P, lalu hapus baris yang tidak Anda inginkan.
  4. Tarik seperti di atas, tetapi di buffer tujuan, pilih secara visual rentang garis yang ingin Anda ganti (tidak harus jumlah baris yang sama) dan ketik "0p. Itu menggunakan 0 (nol) register yang selalu berisi teks dari yank terbaru.

Untuk "menyegarkan" tampilan untuk menunjukkan penyorotan yang tepat, jalankan :diffupdateatau secara sederhana :diffu. Terkadang itu tidak cukup dan Anda perlu memindahkan kursor ke jendela lain untuk menyelesaikan penyegaran.

Anda dapat membaca lebih lanjut tentang menyalin difs

:help copy-diffs
garyjohn
sumber
3

Saya juga ingin memodifikasi satu baris pada saat tertentu selama diff. Jadi saya membuat peta sederhana dan meletakkannya di file vimrc saya.

nnoremap <silent> <leader>dp V:diffput<cr>
nnoremap <silent> <leader>dg V:diffget<cr>

Anda bisa menggunakan do bukannya dg, tapi saya lebih terbiasa berpikir "diffget" daripada [o] btain.

Untuk bonus Anda, saya hanya menggunakan peta sederhana lain dua kali:

nnoremap <silent> <leader>df :call DiffToggle()<CR>

Sekarang, df akan mematikan / pada diffmode, jadi saya matikan saja dan nyalakan kembali.

Dan opsi bonus adalah menambahkan

nmap <silent> <leader>du :wincmd w<cr>:normal u<cr>:wincmd w<cr>

Ini akan memungkinkan Anda untuk membatalkan kesalahan ketik atau perubahan yang tidak diinginkan pada file / jendela lain, karena: membatalkan hanya Anda hanya akan membatalkan perubahan di jendela ini.

lucky85dog
sumber