Bagaimana cara memperluas / menutup bagian diff di Vimdiff?

295

Saya sudah mulai menggunakan vimdiff hari ini, dan ingin melakukan beberapa hal yang saya anggap remeh pada editor berbasis Windows (seperti memperluas / menutup bagian diff, memiliki perluasan file penuh / hanya berbeda dengan 3 baris konteks di atas atau di bawah, dll.). Saat ini saya hanya tahu perintah berikut:

Pintasan Keyboard:

  • do - Dapatkan perubahan dari jendela lain ke jendela saat ini.

  • dp - Masukkan perubahan dari jendela saat ini ke jendela lainnya.

  • ]c - Lompat ke perubahan selanjutnya.

  • [c - Beralih ke perubahan sebelumnya.

  • CTRL+ W, w- Beralih ke jendela pemisahan lainnya ( CTRL+ W, CTRL+ Wmelakukan hal yang sama, jika Anda melepaskan CTRLkunci sedikit kemudian)

Bisakah seseorang mengarahkan saya ke arah yang benar sehingga saya bisa meniru fitur serupa?

Akan lebih baik jika saya dapat memperluas / menutup garis di sekitar diffs, misalnya.

TCSGrad
sumber
2
Untuk pintasan untuk menambah / mengembalikan daftar perubahan yang panjang, lihat stackoverflow.com/q/6093746/212942
TCSGrad
1
Sangat menyenangkan melihat pertanyaan ditutup setelah lebih dari 4 tahun, dengan itu menjadi 3 posting teratas ketika 'vimdiff' di-googled!
TCSGrad

Jawaban:

241

Selain dari yang Anda sebutkan, saya hanya menggunakan sering ketika membedakan berikut:

  • :diffupdate :diffu-> menghitung ulang diff, berguna ketika setelah melakukan beberapa perubahan vim tidak menunjukkan perubahan minimal lagi. Perhatikan bahwa ini hanya berfungsi jika file telah dimodifikasi di dalam vimdiff. Jika tidak, gunakan:
    • :e untuk memuat ulang file jika telah dimodifikasi di luar vimdiff.
  • :set noscrollbind-> nonaktifkan sementara pengguliran simultan pada kedua buffer, aktifkan kembali oleh :set scrollbinddan gulir.

Sebagian besar yang Anda minta adalah lipat: bab manual pengguna vim tentang lipat . Di luar diffs saya kadang-kadang menggunakan:

  • zo -> lipatan terbuka.
  • zc -> tutup lipat.

Tetapi Anda mungkin akan lebih baik dilayani oleh:

  • zr -> mengurangi tingkat lipat.
  • zm -> satu tingkat lipat lagi, tolong.

atau bahkan:

  • zR -> Kurangi lipatan sepenuhnya, kataku !.
  • zM -> lipat Terbanyak !.

Hal lain yang Anda minta, gunakan n garis lipat, dapat ditemukan di bagian manual referensi vim pada opsi , melalui bagian pada diff :

  • set diffopt=<TAB>, lalu perbarui atau tambahkan context:n.

Anda juga harus melihat pada bagian manual pengguna pada diff .

ninjalj
sumber
Memang sangat komprehensif !! Saya akan memeriksa tautan yang Anda katakan, tetapi membiarkan pertanyaan terbuka selama beberapa hari lagi untuk melihat apakah saya mendapatkan lebih banyak balasan (saya memposting pada akhir pekan, dan tidak banyak orang yang akan aktif saat itu).
TCSGrad
Omong-omong, apakah Anda tahu jika vimdiff dapat digunakan untuk menggabungkan / 3-way resolving dll? Akan sangat bagus kalau begitu !!
TCSGrad
1
@ shan23 Untuk penggabungan 3 arah (untuk git), lihat ini . Ada komentar di sana juga di svn. Masih mencoba mencari tahu perintah ketika Anda memiliki 4 buffer (do / dp tidak berfungsi).
quornian
Agar :set noscrollbindberlaku, itu juga harus :set nocursorbinddigunakan yang bukan default. Jadi kedua opsi harus disesuaikan.
Berdarah
4

atur vimdiff untuk mengabaikan case

Setelah mulai dengan vim

 gvim -d main.sql backup.sql &

Saya menemukan bahwa satu file yang mengganggu memiliki kata kunci MySQL dalam huruf kecil dan huruf besar lainnya menunjukkan perbedaan pada hampir setiap baris lainnya

:set diffopt+=icase

ini memperbarui layar secara dinamis & Anda dapat dengan mudah mematikannya lagi

zzapper
sumber
Walaupun ini adalah tip yang bagus, saya tidak melihat bagaimana ini terkait dengan pertanyaan yang ada (bagaimana memperluas dan menutup bagian-bagian yang berbeda di vimdiff).
Paul Stelian
3

Sebenarnya jika Anda melakukannya Ctrl+W W, Anda tidak perlu menambahkan itu Ctrl. Melakukan hal yang sama.

tubbo
sumber
14
Saya menemukan ^ W ^ W jauh lebih cepat untuk mengetik dengan cepat daripada ^ W w.
hobbs
Pikir ini akan layak disebut github.com/ankr/dotfiles/blob/master/files/vimrc#L103
ankr
0

ctrl + w, w seperti yang disebutkan dapat digunakan untuk menavigasi dari panel ke panel.

Sekarang Anda dapat memilih perubahan tertentu saja dan menempelkannya ke panel lain sebagai berikut. Di sini saya memberi contoh seolah-olah saya ingin mengubah potongan kode saya dari panel 1 ke panel 2 dan saat ini kursor saya ada di panel1

  • Gunakan Shift-v untuk menyorot garis dan menggunakan tombol naik atau turun untuk memilih potongan kode yang Anda butuhkan dan melanjutkan dari langkah 3 yang ditulis di bawah ini untuk menempelkan perubahan Anda di panel lain.

  • Gunakan mode visual dan kemudian ubah

    1 klik 'v' ini akan membawa Anda ke mode visual 2 gunakan tombol naik atau turun untuk memilih kode yang diperlukan 3 klik, Esc 'escape key 4 Sekarang gunakan' yy 'untuk menyalin atau' dd 'untuk memotong perubahan 5 lakukan' ctrl + w, w 'untuk menavigasi ke pane2 6 klik' p 'untuk menempel perubahan yang Anda inginkan

Pratheusha KK
sumber
1
Keseluruhan dari apa yang Anda tentukan (kecuali baris pertama) adalah fitur vim itu sendiri, bukan vimdiff per katakan.
TCSGrad