Bagaimana seseorang menghindari garis miring terbalik dan garis miring ke depan dalam pencarian / pencarian VIM?

97

Misalnya, jika saya ingin mencari dan mengganti dengan string yang mengandung garis miring ke belakang atau ke depan, bagaimana ini bisa dilakukan di vim? Terima kasih!

Contoh Find & Replace adalah: :%s/foo/bar/g

bagaimana jika saya ingin menemukan semua kemunculan <dog/>dan menggantinya dengan<cat\>

penyerang
sumber
3
Bukan hanya jawaban, tetapi Anda mungkin harus membaca: bantuan sulap
Tom Morris
+1 Tom, umumnya solusi paling waras saat bekerja dengan regex yang lebih dari sekadar sepele.
Randy Morris
@Tom @Randy Namun ... vi --helpdi server saya TIDAK memberikan penjelasan tentang melarikan diri karakter khusus ... itulah sebabnya orang datang ke stackoverflow untuk memulai ...
aequalsb
@aequalsb :help magicadalah sesuatu yang Anda ketik di dalam vim. Ini bukan argumen baris perintah untuk vim.
doubleDown

Jawaban:

150

Dengan cara yang sama Anda melarikan diri dari karakter paling banyak di mana pun di program linuxy, dengan garis miring terbalik:

:%s/<dog\/>/<cat\\>

Namun perhatikan bahwa Anda dapat memilih pembatas yang berbeda:

:%s@<doc/>@<cat\\>@

Ini membuat Anda tidak perlu mengetik semua garis miring terbalik yang memakan waktu dan membingungkan dalam pola dengan banyak garis miring.

Dari dokumentasi :

Alih-alih /yang mengelilingi pola dan string pengganti, Anda dapat menggunakan karakter bita tunggal lainnya, tetapi bukan karakter alfanumerik \,, "atau |. Ini berguna jika Anda ingin memasukkan a /dalam pola pencarian atau string pengganti.

Bertingkat
sumber
2
Jadi secara otomatis akan mengetahui pembatas yang Anda pilih?
penyerang
13
Iya. Karakter setelah sdiambil sebagai pembatas. Saya tidak tahu di mana saya menemukan daftar di dokumentasi, tapi saya cukup yakin setidaknya /:;*%@#valid.
Cascabel
Ini berguna saat mengganti \ ke / dalam file dengan banyak jalur bergaya Windows. Terima kasih.
Isaac Nequittepas
Untuk mendapatkan pesan itu dalam dokumentasi, gunakan: h e146
jcollado
Tidak tahu Anda bisa mengubah pembatas! Itu luar biasa - terima kasih.
Brettins
22
%s:<dog/>:<cat>

Anda dapat mengganti / pembatas jika mengganggu pola tertentu.

Sarah
sumber
3
1 untuk :pembatas. Saya tidak tahu Anda bisa menggunakan itu. Saya selalu digunakan @pada saat-saat 'kabur-berantakan'
Jeffrey Jose
8

Kutip mereka dengan garis miring terbalik. Selain itu, sering kali membantu menggunakan pembatas lain selain garis miring.

 :%s#<dog/>#<cat\\>#

atau jika Anda harus menggunakan garis miring sebagai pembatas perintah pengganti

 :%s/<dog\/>/<cat\\>/
wallyk
sumber
3

Sintaksnya adalah:

:%s/<dog\/>/<cat\\>/g
Maurizio Reginelli
sumber
2

Saya sedang mencari sesuatu yang serupa, untuk mencari nilai register yang berisi /karakter (untuk merekam makro). Solusinya adalah mencari menggunakan ?token, bukan /.

Fernando
sumber
Perhatikan bahwa ?akan melakukan pencarian mundur, dan tidak sama.
Martin Tournoij
-1

bintang backslash garis miring garis miring terbalik

/(<- the prompt)\/\*

jadi setelah Anda mengetik sepertinya

/\/\*
jim k
sumber
1
Bagaimana jawaban ini berbeda dari jawaban yang telah ada di situs selama hampir enam tahun?
Martin Tournoij