vim: Dapatkah saya membuat * hanya * y melakukan salinan?


11

Saya belajar menyukai vim, tetapi satu hal yang belum sepenuhnya saya pegang adalah situasi salin dan rekat. Dalam editor teks muggle saya akan Ctrl- Cmenyalin sepotong teks dan kemudian mengedit / menghapus dan kemudian menempelkan teks di tempat lain. Namun dalam vim saya tidak dapat melakukan ini karena setelah saya menyalin teks y, memodifikasi teks sering melibatkan ddan xyang menghapus teks asli saya.

Apakah ada cara untuk membuat ddan xtidak menyalin teks? Atau sebaliknya, bagaimana saya harus menggunakan fitur vim ini?

Jawaban:


16

9 menyentak sebelumnya disimpan dalam register yang disebut 1melalui 9. Anda dapat menarik kembali yank bersebelahan dengan "1p, yang sebelumnya dengan "2pdan seterusnya. Perintah ini :regmenunjukkan register yang tersedia untuk ditempel.

Jika Anda ingin sebuah yank bertahan lebih lama, gunakan register surat .

Untuk perintah terkait yank yang lebih tidak jelas, mulailah membaca di :help "dalam manual.


2
Juga, daftar 0 berisi teks terakhir yang ditarik (sebagai lawan dari dihapus). Jadi merujuk kembali ke pertanyaan awal, Anda dapat menarik y, melanjutkan mengedit termasuk ddan x, dan menempelkan teks yang ditarik dengan"0p
Nefrubyr

@Nefrubyr, komentar Anda di atas sebenarnya adalah jawaban paling sederhana, tetapi tidak disebutkan dalam salah satu dari tiga jawaban yang ada. Mungkin Anda harus menambahkannya? (Saya mungkin jika Anda tidak.)
Wildcard

9

Perintah yang Anda bicarakan menggunakan register yang disebut "tidak bernama". Ini dimaksudkan hanya untuk penggunaan jangka pendek. "Aku akan menarik ini dari sini dan meletakkannya di sana" semacam itu.

Ketika Anda ingin memegang sesuatu selama lebih dari beberapa detik saat Anda pergi dan melakukan sesuatu yang lain, Anda harus menggunakan register bernama.

Sebagai contoh, " a y yakan menarik garis kursor ke dalam aregister. Tidak ada yang akan menabraknya secara tidak sengaja, kecuali jika Anda mengetik perintah lain yang melibatkan aregister. Beberapa menit, beberapa jam, bahkan berhari-hari kemudian, Anda dapat mengetik " a puntuk menjatuhkan salinan baris yang ditarik dari aregister di bawah kursor aktif.

(Agar ini berfungsi dengan sangat baik, Anda harus memiliki garis seperti set viminfo='50,\"1000di ~/.vimrcfile Anda , untuk membuatnya mengingat hal-hal seperti mendaftarkan konten di seluruh sesi Vim. Anda kemudian dapat pergi berlibur di antara yank dan put!)

Ada 26 register bernama (az). Jika Anda memberikannya sebagai huruf besar alih-alih seperti yang ditunjukkan di atas, Anda menambahkan konten daftar saat ini alih-alih menggantinya. Jadi, Anda dapat membangun sesuatu yang sangat kompleks, katakanlah, daftarkan hsatu per satu, lalu masukkan semuanya sekaligus " h p.

Perhatikan bahwa nama register adalah opsional. Ini menyiratkan bahwa mungkin ada banyak perintah yang sudah Anda ketahui dan gunakan di mana Anda bisa menggunakan register bernama. Katakan :help registersdalam Vim untuk mendapatkan beberapa gagasan tentang kemungkinan.

Juga, ambil gelas Vi .


1

Jika Anda perlu menghapus teks dengan d tanpa mengubah daftar yank Anda (katakanlah, Anda sudah menarik teks di dalamnya yang belum siap Anda rekatkan sebelum menghapus beberapa teks lainnya misalnya), Anda dapat menggunakan register lubang hitam _ .

Jika Anda melakukannya "_ddmisalnya, baris saat ini akan segera dihapus dan dilupakan.

Sebenarnya, saya tidak terlalu sering menggunakan register ini. Tidak perlu penekanan tombol lebih sedikit daripada menyimpan ke register tujuan umum (register surat apa pun) dan jika Anda menyimpan ke register tujuan umum, setidaknya, baris yang telah Anda hapus masih tersedia sampai Anda menimpa register, jika kebutuhan muncul.

Jika Anda cenderung lupa untuk menggunakan register lain saat menghapus, Anda dapat menentukan makro pembungkus untuk ddmisalnya seperti ini: :noremap dd "add.


0

Seperti yang ditunjukkan dalam komentar untuk jawaban yang diterima (saat ini), cara kanonik untuk melakukan ini adalah dengan menggunakan register nol ( "0). Daftar nol selalu berisi yank terakhir, dan tidak akan ditimpa oleh ddan x, jadi "0pselalu masukkan apa pun yang Anda tarik terlepas dari apa yang telah diedit sementara itu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.