vim memotong dan menempelkan riwayat

60

Ketika saya 'memotong' vim, saya percaya ada register yang menyimpan sejarah dari semua hal baru yang saya potong. Bagaimana cara mengakses register itu?

Sebagai contoh, katakanlah saya memotong setiap kata ini secara berurutan

  • 'Halo'
  • 'Dunia'
  • 'Dan'
  • 'Vim'

Perhatikan bahwa saya tidak benar-benar menyimpan suntingan ini ke register tertentu, saya hanya menggunakan 'd' empat kali berturut-turut.

pengguna4941
sumber

Jawaban:

102

Itu

: daftar bantuan

Perintah mengungkapkan bahwa ada 10 register bernomor ( "0untuk "9).

Mendaftar "0adalah hal terbaru yang ditarik ; register "1memiliki teks terhapus paling baru , register "2penghapusan sebelumnya, hapus"3 sebelum itu, dan sebagainya.

Jika Anda menghapus setiap baris pada gilirannya, register "1, "2, "3dan "4akan berisi "Vim", "Dan", "Dunia" & "Hello", masing-masing.

Anda dapat memverifikasi ini dengan menggunakan perintah :reg(atau :registers):

:reg
""   Vim^J
"1   Vim^J
"2   And^J
"3   World^J
"4   Hello^J

Jadi setelah menghapus empat baris satu per satu, Anda bisa memulihkan baris ke-2 ("Dunia") dengan

"3p

karena itu adalah penghapusan terbaru ketiga.

njd
sumber
Ini sempurna; namun, apa yang saya inginkan dari teks 'yanked' terbaru?
Alexey
Jadi, Anda akan menggunakan: p (yang artinya sama dengan "0p)
njd
1
Perhatikan juga register khusus, terutama "*" dan "+", ketika Anda membaca :help registers. Sangat bermanfaat.
Daniel Andersson
3
Dewa, kamu belajar sesuatu yang baru setiap hari sebagai vimmer. Itu bagus. Terima kasih, @njd.
ELLIOTTCABLE
3
Jawaban ini meninggalkan detail penting: Hanya penghapusan satu baris atau lebih yang disimpan dalam sejarah dengan cara ini. Jika Anda menghapus kata-kata dengan cara yang dijelaskan OP dalam pertanyaan (menggunakan dempat kali, alih-alih dd) maka semua kecuali yang terakhir dihapus akan hilang.
Alexander Rechsteiner
8

Selain jawaban njd, ini dapat disederhanakan dengan plugin YankRing . Selain memudahkan untuk menjelajah yank sebelumnya, Anda dapat mengonfigurasi beberapa tombol untuk memungkinkan Anda menghapus yank sebelumnya dari 'stack'. Ini memungkinkan Anda untuk melakukan:

yy    " Copy first line
yy    " Copy second line
yy    " Copy third line
yy    " Copy fourth line
" Assumes you've mapped ,p to be the pop command: choose your preferred key or key-combination
,p    " Paste fourth line and pop it off the Yank Ring
,p    " Paste third line and pop it off the Yank Ring
,p    " Paste second line and pop it off the Yank Ring
,p    " Paste first line and pop it off the Yank Ring
Al.
sumber
4
Bisakah Anda menambahkan cara memetakan ,pke pop yank sebelumnya?
Andrew Wood