vim: gunakan string dari pencarian di ganti perintah

16

Saya sering menggunakan /perintah vim search untuk memverifikasi ekspresi reguler saya (hanya untuk melihat apa yang cocok). Setelah itu saya biasanya menggunakan :%sperintah replace, di mana saya menggunakan regexp dari pencarian sebagai string yang akan diganti, misalnya saya pertama kali mencari string tersebut:

/TP-\(\d\{5\}\)-DD-\d\{3\}

Ini cocok persis dengan apa yang saya inginkan, jadi saya melakukan penggantian:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

Tapi saya harus menulis lagi seluruh regexp di sini. Biasanya regexp itu jauh lebih lama, itu sebabnya saya mencari solusi:

Apakah ada skrip shortcut atau vim yang ada untuk menempelkan pola pencarian secara langsung ke perintah replace?

Saya menggunakan vim di terminal (tidak ada gvim).

kars7e
sumber

Jawaban:

20

Secara umum, ekspresi reguler kosong berarti menggunakan ekspresi reguler yang dimasukkan sebelumnya, jadi :%s//\1/gsebaiknya lakukan apa yang Anda inginkan.

geekosaurus
sumber
Woah, semudah itu! Apa yang saya butuhkan, terima kasih.
kars7e
10
Juga, jika Anda ingin memverifikasi atau memodifikasi pola yang terakhir digunakan, Anda dapat menggunakan Control-r kemudian /untuk memasukkan konten register pola pencarian ( /) langsung ke baris perintah yang diketik sebagian (misalnya tepat setelah :%s/).
Chris Johnsen
itu petunjuk yang sangat berguna juga. Terima kasih @ Chris! +1
kars7e
Bagaimana jika saya ingin menindaklanjuti "\ 1" dengan nomor seperti katakan 23? Bagaimana saya menghindarinya ditafsirkan sebagai "\ 123"?
Champ
@ Champ Sebagai referensi kembali hanya naik \9, tidak ada ambiguitas.
Kusalananda
4

Cara lain yang baik untuk melihat pencarian regex sebelumnya serta perintah Ex dan melakukan perubahan padanya adalah dengan mengedit perintah ini dalam mode normal. Dari Mode ini, Anda akan memiliki semua kekuatan vim Anda termasuk salin dan tempel.

  • Mencari: daripada ?atau /untuk mencari, coba q/atauq?
  • untuk Ex Perintah, daripada :mencobaq:
  • untuk keluar dari mode ini gunakan CtrlC

Untuk membaca lebih lanjut, lihat :help q:.

Ryan Carney
sumber