Bagaimana cara menarik garis dengan nomor garis tertentu?

Jawaban:

59

Dari :help :yank:

:[range]y[ank] [x]      Yank `[range]` lines [into register x].

Jadi, untuk menarik baris 4, seseorang akan mengetik:

:4yank

Catatan Anda dapat dengan mudah melakukan ini dari mode insert dengan <C-o>; ini memungkinkan Anda untuk mengeksekusi satu perintah, setelah itu Anda kembali ke mode insert; sebagai contoh:

<C-o>:4yank

Anda tentu saja dapat juga menggunakan rentang lain. Beberapa contoh:

  • Baris 1 hingga 3: :1,3yank
  • Seluruh buffer: :%yank
  • Dari baris saat ini ke akhir buffer: :.,$:yank
  • Baris saat ini dan 3 berikutnya: :.,+3yank
  • Baris saat ini dan 3 sebelumnya: :-3,.yank
  • Garis 3 garis di atas garis saat ini: :-3yank

Hal yang paling berguna untuk diingat tentang rentang:

  • Ini dalam bentuk :line1,line2command.
  • A .adalah baris saat ini (Anda dapat benar-benar menghilangkan titik dalam kebanyakan kasus; :.,+3yankdan :,+3yanksama)
  • Anda menentukan garis relatif ke posisi saat ini dengan +ndan -n.

Lihat :help [range]untuk informasi lebih lanjut.

Martin Tournoij
sumber
6
Poin bonus untuk menyebutkan <Co>, saya kurang menggunakannya.
PhilippFrank
7
Ini juga layak disebutkan bahwa Anda dapat menyingkat :4yankdengan:4y
NewbieOnRails
35

Selain jawaban Carpetsmoker, saya harus menunjukkan yang mengagumkan :help :mdan :help :t.

Jika Anda ingin menyalin baris 4 tepat di bawah garis saat ini Anda dapat melakukan ini:

:4t.

atau itu, jika Anda ingin menyalin garis itu tepat di atas garis saat ini:

:4t-
romainl
sumber
1

Selain perintah ex-mode yang Anda punya, Anda dapat mencapainya juga dalam mode perintah, misalnya dengan: 4GY''- yang berarti: goto line 4 ( 4G), yank line ( Y), dan kembali ke baris sebelumnya ( '').

Anda juga dapat menggunakan tanda lompat; untuk pertanyaan kedua Anda, mis. dengan: mm3kY'm- yang artinya: setel tanda m ( mm), naikkan tiga baris ke atas ( 3k), garis tarik ( Y), kembali ke tanda m ( 'm).

Janis
sumber
1
Menggunakan `` mungkin merupakan rekomendasi yang lebih baik daripada '' karena yang pertama kembali ke baris dan kolom yang sama. Ditto untuk `m vs 'm.
jamessan
Saya setuju. (Adakah ide bagaimana membuat backtics literal dalam marka wiki karena mereka memiliki makna khusus?) - Kalau tidak, komentar Anda akan berfungsi sebagai amandemen untuk jawaban saya dan sebagai petunjuk bagi pembaca.
Janis
Anda harus menggunakan beberapa backticks untuk membatasi kode inline (cf, daringfireball.net/projects/markdown/syntax#code ). Saya tahu ini berfungsi dalam pertanyaan / jawaban, tetapi saya tidak bisa membuatnya bekerja dalam komentar saya.
jamessan
1

Cukup ketik

:4y

untuk menarik garis 4

itu akan masuk ke register yang tidak disebutkan namanya. Kemudian, (misalnya) Anda dapat menggunakannya puntuk meletakkannya di tempat lain. Anda juga dapat menggunakan [n]p, misalnya 10p untuk menempelkannya 10 kali.

Anda dapat memasukkannya ke dalam register bernama seperti "a" dengan

:4y a
Michael Durrant
sumber
2
Bagian tentang memasukkannya ke register bernama dengan "ay4 tidak beres. Jika Anda melakukannya, vim akan menunggu Anda untuk mengatakan" 4 whats? ". Misalnya jika Anda menekan Enter maka akan menarik 4 baris mulai dari posisi saat ini, jika Anda mengetik / foo <Enter> itu akan mencabut sampai 4 terjadinya "foo", dll.
Don Hatch
Perintah terakhir harus dibaca 4G"ayy.
romainl
0

Anda dapat melakukan

:10y <Enter> (to copy the line 10)
p (paste line 10 where the cursor is)

Menyiapkan nomor relatif juga membantu Anda dalam berpindah antar baris kode.

:set relativenumber

Sekarang Anda dapat menyalin baris ke-5 di atas kursor dengan:

:-5y <Enter>
:p (to paste)
Stryker
sumber