Apakah orang tidak menjalankan vimtutor lagi? Ini mungkin dalam lima menit pertama belajar cara menggunakan Vim.
dash-tom-bang
131
Apakah Anda ingin menduplikasi baris ini? Yadalah Psewa. :)
Stavr00
3
FWIW Saya telah melakukan vimtutor sekitar belasan kali dalam 2 bulan terakhir dan konsep ini tidak tercakup. Ini memberitahu cara melakukan "dd" dan "v - navigasikan - y" diikuti oleh "p". Ia tidak memberi tahu cara menyalin satu baris tanpa menghapusnya seperti yang diminta di sini.
danielson317
Jawaban:
2768
yyatau Yuntuk menyalin baris (mnemonic: y ank )
atau
ddke d elete garis (salinan Vim apa yang Anda dihapus menjadi clipboard-seperti "mendaftar", seperti cut operasi)
kemudian
puntuk p Aste disalin atau dihapus teks setelah baris saat ini
atau
Puntuk p Aste teks disalin atau dihapus sebelum baris saat ini
Poin yang sangat bagus. Untuk beberapa alasan, saya menemukan bahwa memukul y dua kali lebih cepat bagi saya daripada SHIFT-y
Mark Biek
25
@camflan Saya pikir Y harus "menyalin dari kursor ke akhir"
Dzung Nguyen
42
dan 2yy dapat digunakan untuk menyalin 2 baris (dan untuk n lainnya)
Amir Ali Akbari
5
@nXqd: Ya, persentase besar pengguna peta Yuntuk y$. (Konsisten dengan Ddan C; (tetapi tidak kompatibel dengan Vi (tidak ada yang peduli.))) Itu bahkan diusulkan dalam :help Y.
Aaron Thoma
11
Untuk menyalin dua baris, itu lebih cepat hanya untuk pergi yjatau yk, terutama karena Anda tidak menggandakan pada satu karakter. Plus, ykadalah versi mundur yang 2yytidak dapat dilakukan, dan Anda dapat menempatkan jumlah garis untuk mencapai mundur dalam y9jatau y2k, dll. Satu-satunya perbedaan adalah bahwa hitungan Anda harus n-1untuk total ngaris, tetapi kepala Anda dapat mengetahui bahwa bagaimanapun.
Ketika Anda menekan :dalam mode visual, itu ditransformasikan menjadi '<,'>sehingga pra-memilih rentang garis seleksi visual yang terbentang. Jadi, dalam mode visual, :t0akan menyalin garis di awal.
Benoit
1
Sebagai catatan: ketika Anda mengetik titik dua (:) Anda masuk ke mode baris perintah di mana Anda dapat memasukkan perintah Ex. vimdoc.sourceforge.net/htmldoc/cmdline.html Perintah ex bisa sangat kuat dan singkat. Solusi yyp adalah perintah "Mode normal". Jika Anda ingin menyalin / memindahkan / menghapus garis yang jauh atau rentang garis, perintah Ex bisa jauh lebih cepat.
Niels Bom
7
Diturunkan bukan karena masalah dengan jawaban seperti itu (walaupun itu tidak akan berhasil untuk situasi saya, saya tidak tahu nomor baris yang ingin saya duplikat) tetapi karena BENAR-BENAR tidak boleh menjadi jawaban teratas / diterima untuk ini pertanyaan yang sering dicari.
mjaggard
9
@ mjaggard: jawaban yang diterima selalu di atas, terlepas dari skor mereka. Ya saya menambahkan jawaban itu sebagai pelengkap, dan sepertinya cocok dengan OP.
Ybiasanya dipetakan kembali ke y$(yank (copy) sampai akhir baris (dari posisi kursor saat ini, bukan awal baris)) sekalipun. Dengan baris ini di .vimrc::nnoremap Y y$
Aaron Thoma
1
Jangan lupa tua yang malangyyP
icc97
253
Tidak ada yang lebih sederhana dari ini! Dari mode normal:
yy
kemudian pindah ke baris yang ingin Anda tempelkan di dan
Ya, jika kursor berada di ujung garis dan Anda mengetik spasi seperti yang ditunjukkan, Anda akan menduplikasi garis yang Anda tarik 2 baris di bawah garis yang Anda tarik.
44
Jika Anda menginginkan cara lain:
"ayy: Ini akan menyimpan baris dalam buffer a.
"ap: Ini akan menempatkan isi buffer apada kursor.
7yy setara dengan y7y dan mungkin lebih mudah diingat bagaimana melakukannya.
graywh
10
y7yp (atau 7yyp) jarang bermanfaat; kursor tetap berada pada baris pertama yang disalin sehingga p menempel garis yang disalin antara baris pertama dan kedua dari sumber. Untuk menduplikasi satu blok baris gunakan 7yyP
Anda juga dapat mencoba <Cx> <Cl> yang akan mengulangi baris terakhir dari mode penyisipan dan memberi Anda jendela penyelesaian dengan semua baris. Ini berfungsi hampir seperti <Cp>
Ini sangat berguna, tetapi untuk menghindari harus menekan banyak tombol saya telah memetakannya hanya CTRL-L, ini adalah peta saya: inoremap ^ L ^ X ^ L
Jorge Gajon
11
Opsi lain adalah dengan:
nmap <C-d> mzyyp`z
memberi Anda keuntungan mempertahankan posisi kursor.
Untuk seseorang yang tidak tahu vi, beberapa jawaban dari atas mungkin menyesatkannya dengan frasa seperti "tempel ... setelah / sebelum baris saat ini ".
Ini sebenarnya "tempel ... setelah / sebelum kursor ".
yyatau Yuntuk menyalin garis
atau
dduntuk menghapus garis
kemudian
puntuk menyisipkan teks disalin atau dihapus setelah itu kursor atau
Puntuk menyisipkan teks disalin atau dihapus sebelum yang kursor
1 gotcha: ketika Anda menggunakan "p" untuk meletakkan garis, itu meletakkannya setelah garis kursor Anda aktif, jadi jika Anda ingin menambahkan garis setelah garis yang Anda tarik, jangan gerakkan kursor ke bawah garis sebelum meletakkan baris baru.
Bagi mereka yang mulai belajar vi, berikut adalah pengantar vi yang baik dengan mendaftar perintah berdampingan vi untuk gerakan kursor Windows GUI Editor dan tombol pintas khas. Ini mencantumkan semua perintah dasar termasuk yy(salin baris) dan p(tempel setelah) atau P(tempel sebelumnya).
Jika Anda ingin menduplikasi baris dan menempelkannya langsung di bawah seperti saat ini, seperti di Sublime Ctrl+ Shift+ D, maka Anda dapat menambahkan ini ke .vimrcfile Anda .
Ini menyisakan mode menyisipkan, dan hanya menambahkan isampai akhir untuk memasukkannya kembali rusak undo, sehingga solusi untuk menduplikasi garis dalam mode menyisipkan tidak sepele seperti yang terlihat.
DarkWiiPlayer
Ini berfungsi dengan baik bagi saya: imap <S-C-d> <Esc>Ypi mode insert dan nmap <S-C-d> <Esc>Ypdalam mode normal
jedi
0
Saya suka menggunakan pemetaan ini:
:nnoremap yp Yp
karena itu membuatnya konsisten untuk digunakan bersama YPperintah asli .
Y
adalahP
sewa. :)Jawaban:
yyatau Yuntuk menyalin baris (mnemonic: y ank )
atau
ddke d elete garis (salinan Vim apa yang Anda dihapus menjadi clipboard-seperti "mendaftar", seperti cut operasi)
kemudian
puntuk p Aste disalin atau dihapus teks setelah baris saat ini
atau
Puntuk p Aste teks disalin atau dihapus sebelum baris saat ini
sumber
Y
untuky$
. (Konsisten denganD
danC
; (tetapi tidak kompatibel dengan Vi (tidak ada yang peduli.))) Itu bahkan diusulkan dalam:help Y
.yj
atauyk
, terutama karena Anda tidak menggandakan pada satu karakter. Plus,yk
adalah versi mundur yang2yy
tidak dapat dilakukan, dan Anda dapat menempatkan jumlah garis untuk mencapai mundur dalamy9j
atauy2k
, dll. Satu-satunya perbedaan adalah bahwa hitungan Anda harusn-1
untuk totaln
garis, tetapi kepala Anda dapat mengetahui bahwa bagaimanapun.Mode normal: lihat jawaban lain.
Cara Ex :
:t.
akan menduplikasi baris,:t 7
akan menyalinnya setelah baris 7,:,+t0
akan menyalin baris saat ini dan selanjutnya di awal file (,+
adalah sinonim untuk kisaran.,.+1
),:1,t$
akan menyalin garis dari awal hingga posisi kursor hingga akhir (1,
adalah sinonim untuk rentang1,.
).Jika Anda perlu memindahkan alih-alih menyalin, gunakan
:m
alih-alih:t
.Ini bisa sangat kuat jika Anda menggabungkannya dengan
:g
atau:v
::v/foo/m$
akan memindahkan semua baris yang tidak cocok dengan pola "foo" ke akhir file.:+,$g/^\s*class\s\+\i\+/t.
akan menyalin semua baris berikutnya dari formulirclass xxx
tepat setelah kursor.Referensi:
:help range
,:help :t
,:help :g
,:help :m
dan:help :v
sumber
:
dalam mode visual, itu ditransformasikan menjadi'<,'>
sehingga pra-memilih rentang garis seleksi visual yang terbentang. Jadi, dalam mode visual,:t0
akan menyalin garis di awal.:t.
adalah jawaban tepat untuk pertanyaan itu.YP
atauYp
atauyyp
.sumber
Y
biasanya dipetakan kembali key$
(yank (copy) sampai akhir baris (dari posisi kursor saat ini, bukan awal baris)) sekalipun. Dengan baris ini di.vimrc
::nnoremap Y y$
yyP
Tidak ada yang lebih sederhana dari ini! Dari mode normal:
kemudian pindah ke baris yang ingin Anda tempelkan di dan
sumber
yy
akan menarik garis saat ini tanpa menghapusnya
dd
akan menghapus baris saat ini
p
akankah
put
sebuah garis diraih oleh salah satu metode sebelumnyasumber
Melakukan hal ini:
Pertama, yymenyalin garis saat ini, dan kemudian pmenempel.
sumber
Jika Anda menginginkan cara lain:
"ayy
: Ini akan menyimpan baris dalam buffera
."ap
: Ini akan menempatkan isi buffera
pada kursor.Ada banyak variasi dalam hal ini.
"a5yy
: Ini akan menyimpan 5 baris dalam buffera
.Lihat " File bantuan Vim untuk lebih banyak kesenangan.
sumber
yyp - ingat itu dengan "yippee!"
Beberapa baris dengan angka di antaranya:
y7yp
sumber
:.,.+7 copy .+7
: Pyyp - tempel setelah
yyP - tempel sebelumnya
sumber
Saya suka: Shift+ v(untuk memilih seluruh baris segera dan membiarkan Anda memilih jalur lain jika Anda mau), y, hlm
sumber
Anda juga dapat mencoba <Cx> <Cl> yang akan mengulangi baris terakhir dari mode penyisipan dan memberi Anda jendela penyelesaian dengan semua baris. Ini berfungsi hampir seperti <Cp>
sumber
Opsi lain adalah dengan:
memberi Anda keuntungan mempertahankan posisi kursor.
sumber
Untuk seseorang yang tidak tahu vi, beberapa jawaban dari atas mungkin menyesatkannya dengan frasa seperti "tempel ... setelah / sebelum baris saat ini ".
Ini sebenarnya "tempel ... setelah / sebelum kursor ".
yyatau Yuntuk menyalin garis
atau
dduntuk menghapus garis
kemudian
puntuk menyisipkan teks disalin atau dihapus setelah itu kursor
atau
Puntuk menyisipkan teks disalin atau dihapus sebelum yang kursor
Untuk pengikatan kunci lainnya, Anda dapat mengunjungi situs ini: vi Daftar Binding Kunci Lengkap
sumber
1 gotcha: ketika Anda menggunakan "p" untuk meletakkan garis, itu meletakkannya setelah garis kursor Anda aktif, jadi jika Anda ingin menambahkan garis setelah garis yang Anda tarik, jangan gerakkan kursor ke bawah garis sebelum meletakkan baris baru.
sumber
Defaultnya adalah yyp, tapi saya sudah menggunakan rebinding ini selama setahun atau lebih dan menyukainya:
" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv
sumber
Aku tahu aku terlambat ke pesta, tapi apalah; Saya memilikinya di .vimrc saya:
yang
:copy
perintah hanya salinan garis yang dipilih atau kisaran (selalu seluruh baris) di bawah nomor baris yang diberikan sebagai argumen.Dalam mode normal yang dilakukan adalah
copy .
menyalin baris ini tepat di bawah baris ini .Dan dalam mode visual itu berubah menjadi
'<,'> copy '>
salinan dari awal seleksi ke akhir seleksi ke baris di bawah akhir seleksi .sumber
Bagi mereka yang mulai belajar vi, berikut adalah pengantar vi yang baik dengan mendaftar perintah berdampingan vi untuk gerakan kursor Windows GUI Editor dan tombol pintas khas. Ini mencantumkan semua perintah dasar termasuk yy(salin baris) dan p(tempel setelah) atau P(tempel sebelumnya).
vi (Vim) untuk Pengguna Windows
sumber
Jika Anda ingin menduplikasi baris dan menempelkannya langsung di bawah seperti saat ini, seperti di Sublime Ctrl+ Shift+ D, maka Anda dapat menambahkan ini ke
.vimrc
file Anda .nmap <S-C-d> <Esc>Yp
Atau, untuk mode Sisipkan:
imap <S-C-d> <Esc>Ypa
sumber
i
sampai akhir untuk memasukkannya kembali rusakundo
, sehingga solusi untuk menduplikasi garis dalam mode menyisipkan tidak sepele seperti yang terlihat.imap <S-C-d> <Esc>Ypi
mode insert dannmap <S-C-d> <Esc>Yp
dalam mode normalSaya suka menggunakan pemetaan ini:
karena itu membuatnya konsisten untuk digunakan bersama
YP
perintah asli .sumber