Bagaimana cara menarik garis tertentu tanpa menggerakkan kursor dalam vim?


40

Sebagai contoh

teks alternatif

Bagaimana saya bisa menarik dan menempelkan Baris 4 hanya ke Baris 12 tanpa harus memindahkan kursor ke Baris 4?

teks alternatif


Saya menjawab pertanyaan Anda berdasarkan fakta bahwa "nyentak aku!" ada di baris 4. Di tangkapan layar 2 Anda, muncul di baris 5.
Louis Salin

Terima kasih @Louis untuk jawabannya. Saya telah memperbarui tangkapan layar.
Lazer

Jawaban:


52

Jika kursor sudah di jalur 12, maka sederhana

: 4y
P

melakukannya untuk saya.


1
Bagus! Apakah ada yang setara untuk x? Ketika saya mencoba, :4xsaya mengerti E140: Use ! to write partial buffer. Terima kasih!
dotancohen

Saya harus mengatakan ini luar biasa: D
nXqd

@dotancohen:4d
n.st

Apakah ada cara yang baik untuk melakukan ini dengan nomor baris relatif?
TrungDQ

Dengan angka relatif cukup gunakan + dan -. Jadi -4 adalah empat baris di atas kursor dan +4 adalah empat baris di bawahnya.
rickythefox

10

Bagaimana dengan ini: Kursor ada di jalur 11, Anda dalam mode "vi".

:4co.<return>

Anda juga bisa melakukannya dengan sebuah pola:

:/^Yank/co.<return>

Anda bisa menggunakan "mo" (pindah) bukan "co" (salin) untuk hanya memindahkan garis, bukan mencabut dan meletakkan.


1
Bahkan lebih pendek ( t sebagai perintah penyalinan adalah sisa dari ed)::4t.
tarleb


8

Mencoba:

:4co11

Anda dapat menggunakan argumen 0untuk menempelkan ke baris 1. Ini juga akan bekerja dengan rentang:

:m,n co k

akan menyalin garis mmelalui ngaris k+1. Selain itu, tidak masalah di mana Anda berada di buffer. The moveperintah, m, bekerja mirip.


2

Ini harus dilakukan:

:4,12y
p
k

1
Tidak, itu menarik nomor baris 4 sampai 12.
Lazer

Maksud saya salin dan tempel baris 4, ke baris 12.
Lazer

Diedit. Apakah ini yang anda inginkan?
Umang

2

Yang lain telah menyebutkan metode paling langsung untuk melakukan ini, yaitu :4y , tetapi saya ingin menambahkan dua catatan tentang hal ini yang mungkin berguna:

Satu, jika Anda mengetik :help rangeAnda akan mempelajari semua tentang menggunakan rentang untuk menerapkan perintah Ex style. SANGAT berguna dalam banyak kasus, dan jauh lebih fleksibel daripada menggunakan nomor baris. Misalnya, jika Anda ingin menarik baris pertama dimulai dengan "menarik" setelah awal dokumen (bahkan jika itu ada di baris pertama), gunakan:0/^yank/y . Bagian paling kuat dari rentang adalah kemampuan untuk menggabungkannya, misalnya,:./^Chapter/+50?Pete?d berarti "Temukan baris berikutnya untuk memulai dengan Bab kata (mencari maju dari baris saat ini), kemudian melompat maju 50 baris, dan mencari mundur untuk kata Pete, dan hapus baris pertama yang Anda temukan. " Kecuali bahwa itu tidak benar-benar memindahkan kursor, itu hanya melakukan apa yang kamu katakan.

(Saya telah menggunakan jenis kisaran spesifikasi ini untuk mengotomatiskan pembuatan dokumentasi fiddly yang melibatkan pencarian nama fungsi di bawah kursor, lalu mencari baris berikutnya yang bertuliskan "Deskripsi" dan menariknya ke register tertentu ... dll.)

Tip lainnya, adalah bahwa Anda harus tahu tentang melompat. Ketik :help jump-motionsuntuk mempelajarinya sepenuhnya, tetapi cara berhubungan di sini adalah bahwa Anda dapat melompat ke baris 4, menariknya dan kemudian KEMBALI dengan 4Gyy''(atau menggunakan backticks alih-alih apostrof untuk melompat kembali ke posisi awal yang tepat, daripada hanya LINE yang sama Anda mulai.)


2

Terpendek:

:1t. menyalin baris pertama di bawah arus.

Dengan rentang: :1,4t.salinan baris 1 hingga 4 (inklusif) di bawah ini.

Juga dimungkinkan dengan nomor garis relatif:

:-1t. menyalin baris sebelumnya di bawah arus.

Dalam contoh Anda, :4t-1salin baris keempat di bawah baris yang diinginkan.

Catatan: :tadalah sinonim untuk :co[py]perintah.

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.