Salin, hapus, lalu tempel di Vim

15

Saya baru mulai dengan Vim kemarin dan saya kesulitan memahami copy & paste. Saya mengerti untuk menyalin saya memasuki mode visual, sorot dan kemudian mencabut. Saya kemudian pindah ke baris yang ingin saya tempelkan, tetapi lebih sering saya tidak perlu menghapus beberapa teks dari baris ini. Saya melakukan ini menggunakan xatau dw. Ini kemudian menghasilkan salinan asli saya ditimpa (seperti xdan dwtampaknya dipotong). Bagaimana saya mengatasi ini?

Sebagai contoh

$foo = $this->foo->property;
thislineuses($foo);

Jadi dengan kode di atas saya salin $this->foo->property, saya kemudian ingin pergi ke baris 2, hapus $foodan tempel. Masalah saya adalah ketika saya menghapus $foodari baris 2 inilah yang kemudian disisipkan $this->foo->property.

Kazark
sumber

Jawaban:

16

Lihatlah :h copy-move. Tarik atau hilangkan default masuk ke tempat yang disebut register (register bernama "). Jika Anda perlu menghapus beberapa teks sebelum menempel, Anda harus menghindari menimpa register x, seperti yang Anda temukan. Untungnya, Anda dapat menggunakan huruf atau nomor lain untuk memberi nama register yang berbeda.

  • "ayy(menarik garis ke register a)
  • x,, dddll. (hapus beberapa teks ke dalam register yang tidak disebutkan namanya, ")
  • "ap(tempel teks dari register a)
Kristo
sumber
9

Jika masalahnya adalah Anda hanya perlu mengganti beberapa textdengan beberapa text2, maka, cukup sorot dan tarik text2. Kemudian sorot textdan tekan patau Puntuk menempelkan text2di text.

Panduan lebih lanjut untuk beberapa perintah vim umum adalah http://www.catswhocode.com/blog/100-vim-commands-every-programmer-should-know

Nikmati!

Sunting: perhatikan bahwa pmenempel teks setelah kursor dan Psebelum kursor.


sumber
ini bagus karena Anda tidak perlu memikirkan register perantara untuk menarik. itu hanya berfungsi.
Jon Schoning
7

Anda dapat menyalin ke register bernama "ayw, lakukan hapus dan tempel dari register bernama "ap.

Namun, biasanya lebih mudah untuk hanya mengubah urutan Anda melakukan sesuatu. Lakukan tempel dan kemudian hapus, atau hapus lalu lakukan salin / tempel.

Atau, Anda dapat menghapus ke dalam register lubang hitam "_d. Lihat /programming//q/54255/70863

Eric Bock
sumber
3

Anda memiliki berbagai register yang dapat Anda gunakan untuk menyimpan nilai teks yang berbeda. Jika Anda ingin menyimpan teks ke register yang berbeda dari pada tempat teks yang dihapus akan dihapus (yaitu dari menggunakan xatau d w), daripada menggunakan yang berikut:

Untuk menyimpan teks dalam register a:

  • tekan " a[yank dan perintah gerakan] (menyimpan teks ke dalam register a)
  • pergi ke tempat Anda ingin menempelkan teks
  • tekan " a p(tempel teks dari daftar a)

Anda dapat menggunakan register untuk masing-masing huruf pada keyboard dan setiap nomor. Menghapus teks tidak akan menggunakan register itu, jadi teks akan tetap ada dalam register sampai Anda mengakhiri sesi Anda atau secara manual meletakkan sesuatu di sana.

Jason Down
sumber
0

Anda tidak perlu menyorot seluruh baris jika Anda menggunakan v(sebagai lawan dari V) mode visual. Jika itu yang Anda minta.

Jika Anda berbicara tentang memodifikasi teks yang disalin, maka Anda pertama-tama menyalin dan menghapus bagian-bagiannya.

Dan jika Anda ingin menyalin, lalu memodifikasi dokumen asli dan kemudian menempel, Kemudian Anda dapat menarik ke register lain. Suka "2y, lalu modifikasi, lalu pergi ke tempat lain dan "2p.

Michael Krelin - hacker
sumber