Eğik çizgi (/) yerine bir ikame komutunda ünlem işareti (!) Koymak ne anlama gelir?


13

Geçenlerde yazarın /yerine !böyle bir ikame bir komut gördüm ::s!abc!ABC!g

Bu kullanımla ilgili bazı belgeler bulmaya çalıştım, ancak alakalı bir şey bulamadım. Bu yüzden kendim denemeye çalıştım ve bir kez daha iki işaret arasındaki gerçek farkı anlayamadım. İşte bulduğum:

  • Bu karıştırmak mümkün değildir !ve /bir komuta. Örneğin :s!abc/ABCbaşarısız olur.
  • Bir örüntüden a !kaçmasını önlemek için kullanmak yararlı olabilir /. Mesela ben değiştirmek istiyorsanız </ile %kullanabileceğim :%s!</!%!gyerine :%s/<\//%/g.
  • Bazı durumlarda bazı regex ile çalışmaz /ve düzgün çalışır, !ancak gerçekten bir regex uzmanı olmadığım için bundan emin değilim.

Benim sorum basit: !Yedek bir komutta kullanmanın avantajı nedir ve ne zaman kullanmaya karar vermeliyim /?



Aslında yanlışlıkla bir çift yazı yaptım, ne yapmam gerektiğini bilmek için birkaç dakika önce işaretledim.
statox

Yanıtlar:


22

Gönderen :help :global:

Etrafını çevreleyen '/' yerine, {pattern}başka bir tek baytlık karakter kullanabilirsiniz, ancak '\', '"' veya '|' alfabetik bir karakter kullanamazsınız. arama modeli veya değiştirme dizesi.

Deneylerinizden daha önce tasarladığınız gibi, bu, " eğilerek kürdan sendromu " olarak adlandırılan şeyi önlemek içindir . Bunu düşün:

:%s/\/home\/martin\/test/\/home\/jake\/x/

e karşı:

:%s!/home/martin/test!/home/jake/x!

İkinci form çok daha okunaklı.

Sınırlayıcıyı değiştirebilmenizin tek nedeni budur; insanlar için daha okunaklı hale getirmek. Bilgisayar umurunda değil.

Bu arada diğer bazı programlar daha da esnektir, sedörneğin xGNU'da isterseniz sınırlayıcı olarak kullanabilirsiniz . sed sxaxbxg fileile aynıdır sed s/a/b/g file.


Okunabilirliğe gelince :%s@/home/martin/test@/home/jake/x@, "yağ" @ifadenin tek tek bölümlerinin nerede başladığını / bittiğini görmeyi daha da kolaylaştırdığı için tercih ediyorum (ve öneriyorum) .
DevSolar

@DevSolar :%s#/home/martin/test#/home/jake/x#İşleri daha da iyi buldum , ama bu sadece kişisel görüş.
Amit Gold
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.