Pertanyaan Bagaimana cara menggunakan register vim?


Saya hanya tahu satu contoh menggunakan register adalah melalui CtrlR* dimana saya menempelkan teks dari clipboard.

Apa kegunaan lain dari register? Bagaimana cara menggunakannya?

Segala yang Anda ketahui tentang register VI (mari fokus pada vi 7.2) - bagikan kepada kami.


824
2017-09-30 13:12


asal


Jawaban:


Mendaftar di Vim memungkinkan Anda menjalankan tindakan atau perintah pada teks yang tersimpan di dalamnya. Untuk mengakses daftar, Anda mengetik "a sebelum sebuah perintah, di mana a adalah nama register. Jika Anda ingin menyalin baris saat ini ke dalam register k, Anda bisa mengetik

"kyy

Atau kamu bisa menambahkan ke daftar dengan menggunakan huruf kapital

"Kyy

Anda kemudian dapat bergerak melalui dokumen dan tempelkan di tempat lain menggunakan

"kp

Untuk menempelkan dari clipboard sistem di Linux

"+ p

Untuk menempelkan dari clipboard sistem pada Windows (atau dari clipboard "sorot mouse" di Linux)

"* p

Untuk mengakses semua tipe register yang didefinisikan saat ini

: reg


1035
2017-09-30 13:17



Saya senang ketika saya menemukan 0 daftar. Jika Anda mencabut teks tanpa menugaskannya ke register tertentu, maka ia akan ditugaskan ke 0 daftar, serta disimpan di default " daftar. Perbedaan antara 0 dan " register adalah itu 0 hanya diisi dengan teks yanked, sedangkan register default juga diisi dengan teks yang dihapus menggunakan d/D/x/X/c/C/s/S perintah.

Saya menemukan ini berguna ketika saya ingin menyalin beberapa teks, menghapus sesuatu dan menggantinya dengan teks yang disalin. Langkah-langkah berikut mengilustrasikan sebuah contoh:

  • Tarik teks yang ingin Anda salin y[motion] - teks ini disimpan di " dan 0 register
  • Hapus teks yang ingin Anda ganti d[motion] - teks ini disimpan di " daftar
  • Tempelkan teks yang disedot "0p

dimana " adalah perintah untuk menggunakan register untuk perintah selanjutnya.

Pada langkah terakhir, jika Anda menempel dari daftar default (dengan p), itu akan menggunakan teks yang baru saja Anda hapus (mungkin bukan apa yang Anda maksudkan).

Perhatikan itu p atau P pasta dari daftar default. Persamaan tangan panjang akan menjadi ""p (atau ""P) dan "0 memegang tegukan terakhir, "1menyimpan penghapusan atau perubahan terakhir.

Untuk info lebih lanjut lihat :help registers.


702



Salah satu bagian favorit saya tentang register adalah menggunakan mereka sebagai macro!

Katakanlah Anda berurusan dengan file nilai yang dibatasi tab seperti ini:

ID  Df  %Dev    Lambda
1   0   0.000000    0.313682
2   1   0.023113    0.304332
3   1   0.044869    0.295261
4   1   0.065347    0.286460
5   1   0.084623    0.277922
6   1   0.102767    0.269638
7   1   0.119845    0.261601

Sekarang Anda memutuskan bahwa Anda perlu menambahkan tanda persentase di bagian akhir bidang% Dev (mulai dari baris ke-2). Kami akan membuat makro sederhana di (dipilih secara acak) m daftar sebagai berikut:

  1. Tekan: qm: Untuk mulai merekam makro di bawah m daftar.

  2. EE: Pergi ke ujung kolom ke-3.

  3. a: Mode sisipkan untuk ditambahkan ke bagian akhir kolom ini.

  4. %: Ketik tanda persen yang ingin kita tambahkan.

  5. <ESC>: Kembali ke mode perintah.

  6. j0: Pergi ke awal baris berikutnya.

  7. q: Hentikan merekam makro

Kita sekarang bisa mengetik @m untuk menjalankan makro ini pada baris saat ini. Selanjutnya, kita bisa mengetik @@ untuk mengulang, atau 100@m untuk melakukan ini 100 kali! Hidup terlihat bagus.

Pada titik ini Anda harus mengatakan, "TAPI TUNGGU, APA YANG DILAKUKAN INI HARUS DILAKUKAN DENGAN REGISTER? "

Poin yang sangat baik. Mari kita selidiki apa yang ada di isi m daftar dengan mengetik "mp. Kami kemudian mendapatkan yang berikut:

EEa%<ESC>j0

Pada awalnya ini terlihat seperti Anda secara tidak sengaja membuka file biner di notepad, tetapi pada pandangan kedua, itu adalah urutan karakter yang tepat dalam makro kami!

Anda adalah orang yang penasaran, jadi mari lakukan sesuatu yang menarik dan edit baris teks ini untuk menyisipkan a ! bukannya membosankan tua %.

EEa!<ESC>j0

Kalau begitu mari kita masukkan ini ke dalam n daftar dengan mengetik B"nyE. Kemudian, hanya untuk iseng, mari kita jalankan n makro pada garis data kami menggunakan @n....

OMG, ITU DITAMBAHKAN !

Pada dasarnya, menjalankan makro seperti menekan urutan kunci yang tepat dalam register makro itu. Jika itu bukan trik mendaftar yang keren, aku akan memakan topiku.


301



Register berguna lainnya:

"* atau "+ - isi clipboard sistem

"/ - Perintah pencarian terakhir

": - Perintah terakhir.

Catatan dengan vim macro, Anda dapat mengeditnya, karena mereka hanya daftar dari keystrokes yang digunakan saat merekam makro. Jadi Anda dapat menulis ke file teks makro (menggunakan "ap untuk menulis makro Sebuah) dan mengeditnya, dan memuatnya ke dalam daftar "ay$. Cara yang bagus untuk menyimpan makro yang bermanfaat.


94



Itu register lubang hitam  _ adalah /dev/null dari register.

Saya menggunakannya di vimrc saya untuk memungkinkan menghapus satu karakter tanpa memperbarui daftar default:

noremap x "_x

dan menyisipkan dalam mode visual tanpa memperbarui daftar default:

vnoremap p "_dP

65



Jika Anda ingin menempelkan isi register dalam perintah ex-mode, tekan <C-r><registerletter>.

Kenapa kamu menggunakan ini? Saya ingin melakukan pencarian dan mengganti string gondrong, jadi saya memilihnya dalam mode visual, mulai mengetik ekspresi pencarian / ganti :%s/[PASTE YANKED PHRASE]//g dan pergi pada hariku.

Jika Anda hanya ingin menempelkan satu kata dalam mode ex, dapat memastikan kursor berada di dalamnya sebelum masuk ke mode ex, lalu tekan <C-r><C-w> saat dalam mode ex untuk menempelkan kata.


45



Saya pikir register guru rahasia adalah ekspresi = daftar. Ini dapat digunakan untuk pemetaan kreatif.

:inoremap  \d The current date <c-r>=system("date")<cr>

Anda dapat menggunakannya bersama dengan sistem Anda seperti di atas atau mendapatkan respons dari fungsi VimL khusus, dll.

atau hanya hal-hal khusus seperti

<c-r>=35+7<cr>

41



Trik keren adalah untuk digunakan "1p untuk menempelkan penghapusan / perubahan terakhir (, lalu gunakan . untuk berulang kali untuk menempelkan penghapusan berikutnya. Dengan kata lain, "1p... pada dasarnya setara dengan "1p"2p"3p"4p.

Anda dapat menggunakan ini untuk membalik urutan beberapa baris: dddddddddd"1p....


31



  • q5 mencatat pengeditan menjadi register 5 (perekaman q berhenti berikutnya)
  • : reg tampilkan semua register dan konten apa saja di dalamnya
  • @ 5 jalankan register 5 makro (rekaman hasil edit)

16