Bagaimana cara mengganti kata dengan kata yang ditarik ke dalam mode normal

25

Ketika saya harus mengganti kata dengan kata lain yang saya tarik sebelumnya, saya biasanya menggunakan alur kerja yang tampaknya tidak alami bagi saya:

Katakanlah saya memiliki teks ini:

foo bar buzz

Dan saya ingin menarik foodan mengganti bardengan apa yang saya tarik sebelumnya.

Setelah menarik foo, saya melihat opsi berikut:

Pilihan 1

  1. Tempatkan kursor bardenganw

  2. Taruh foodi depan bardenganP

  3. Letakkan kursor di atas byang tersisa bardan hapus kata dengande

pilihan 2

  1. Letakkan kursor di bar dengan w

  2. Gunakan deuntuk menghapusbar

  3. Masukkan konten register 0 dengan "0P(karena saya dihapus bar, footidak dapat diakses lagi dengan sederhana p)

Kedua cara itu tampaknya terlalu rumit bagi saya dan saya yakin ada cara yang lebih efisien untuk mencapai tindakan ini, tetapi saya tidak dapat menemukannya. Gagasan ini adalah untuk menggabungkan tindakan delete dan put hanya dalam satu, atau setidaknya menghindari untuk menyimpan kata yang dihapus dalam register yank sehingga saya dapat menempatkan kata yang diinginkan dengan sederhana p.

Saya juga tahu mode ganti dipicu dengan Rtetapi tidak memungkinkan untuk menempatkan apa yang ditarik.

TL; DR : Bagaimana cara mengganti kata dengan isi dari daftar yank?

statox
sumber

Jawaban:

31

Dengan asumsi Anda sudah menarik foodengan yeatau sesuatu yang serupa, dan kursor berada di suatu tempat foo, Anda dapat menggunakan Wvep:

  • Wuntuk pergi ke bar(ini jelas opsional dan akan tergantung pada posisi kursor saat ini);
  • v untuk memulai mode visual;
  • euntuk pergi ke akhir kata (Anda juga dapat menggunakan gerakan lain di sini, seperti iw);
  • puntuk menempel foo; ini akan menggantikan pemilihan visual saat ini (yang dimasukkan ke dalam register tanpa nama, "").
Martin Tournoij
sumber
2
Anda mungkin tertarik pada berikut vimcast episode: Menempelkan dari modus Visual dan swapping dua wilayah teks dengan exchange.vim
Peter Rincker
6

Saya telah menemukan cara lain untuk melakukannya, ini sedikit mirip dengan opsi 2 tetapi memiliki keuntungan karena tidak mengacaukan keadaan register.

Idenya adalah untuk menggunakan " daftar lubang hitam ": Daftar ini dapat diakses melalui "_dan memiliki kekhasan yang dapat Anda tulis di dalamnya tetapi tidak membacanya, jadi seperti lubang hitam register ini benar-benar menghilangkan segala sesuatu yang masuk ke dalamnya. Di sini kita dapat menggunakannya sehingga footetap dalam daftar yank bahkan setelah barpenghapusan.

Dengan solusi ini, worflow setelah mencabut fooadalah:

  • Pergi bardengan W(atau kata-kata yang dibutuhkan tentu saja)
  • Menggunakan "hitam lubang daftar" untuk menghapus bardengan"_de
  • Puting foodari daftar yank dengan P. Register yank masih berisi foosejak barmasuk ke lubang hitam.

Saya tidak yakin itu adalah solusi yang lebih baik daripada @ Carpersmoker ( dalam hal vimgolf @Carpetsmoker menang ) tetapi saya tidak tahu tentang daftar lubang hitam dan saya pikir beberapa mungkin tertarik untuk mengetahuinya.

statox
sumber
3
  1. Pergi ke mulai dari "foo". Tekan yiw. Itu menarik kata batiniah.

  2. Pergi ke "bar" menekan surat itu w. Kemudian pilih dan tarik kembali:viw"0p

Saya menggunakan ciwdan yiwbanyak.

Xabierrek
sumber
4
Penggunaan objek teks seperti iwini menarik tetapi solusi Anda sebenarnya sama dengan @ CarpetSmoker: memilih secara visual kata kedua dan meletakkan yang pertama. Saya juga berpikir bahwa solusi Anda akan bekerja dengan sederhana pdaripada menggunakan "0register.
statox
1
  • Saat kursor berada di mana saja pada kata,

    • yiw- mencabut kata dan menyimpannya dalam 0register.
  • Pergi ke kata target untuk diganti

    • ciw akan menghapus kata dan menempatkan Anda dalam mode sisipkan.
    • ctrl-r. A "akan muncul meminta register untuk dipanggil.
    • 0 akan menempelkan kata yang ditarik.

Kata-kata yang ditarik (biasanya!) Disimpan dalam 0register. Lihat :registersuntuk melihat buffer yang disimpan. Ini mungkin tampak prosedur yang panjang, IMHO ini membuka pintu ke trik register yang jauh lebih canggih.

Sat Yam
sumber