Що означає заміна косої риски (/) на знак оклику (!) У команді-заміннику?


13

Нещодавно я побачив команду-заміну, де автор /замінив !подібне::s!abc!ABC!g

Я намагався знайти деяку документацію щодо цього використання, але не зміг знайти щось відповідне. Тож я спробував експериментувати сам, і ще раз не зміг з’ясувати реальну різницю між двома ознаками. Ось що я знайшов:

  • Змішувати !і /в команді неможливо . Наприклад, :s!abc/ABCне вдається.
  • Це може бути корисно використовувати, !щоб уникнути уникнення /схеми в. Наприклад, якщо я хочу замінити </на, %я можу використовувати :%s!</!%!gзамість :%s/<\//%/g.
  • Здається, що в деяких випадках деякий регекс не працюватиме /і працює належним чином, !але оскільки я не є спеціалістом з регулярних виразів, я не впевнений у цьому.

Тож моє запитання просте: Яка перевага використання !команди-замінника і коли я повинен вирішити використовувати її замість /?



Дійсно, я помилково зробив подвійний пост, кілька хвилин тому позначив його, щоб знати, що мені робити.
statox

Відповіді:


22

Від :help :global:

Замість '/', що оточує {pattern}, ви можете використовувати будь-який інший однобайтовий символ, але не алфавітний символ, '\', '"' або '|'. Це корисно, якщо ви хочете включити '/' в шаблон пошуку або рядок заміни.

Як ви вже задумали від своїх експериментів, це запобігає так званому " синдрому схильної зубочистки ". Врахуйте це:

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

проти:

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

Друга форма, очевидно, набагато читабельніша.

Це єдина причина, по якій ви можете змінити роздільник; щоб зробити його більш читальним для нас людей. Комп'ютер не хвилює.

Деякі інші програми, до речі, ще більш гнучкі, наприклад, в GNU sedви можете використовувати xяк роздільник, якщо хочете. sed sxaxbxg fileте саме, що sed s/a/b/g file.


Що стосується читабельності, то я віддаю перевагу (і пропоную) :%s@/home/martin/test@/home/jake/x@, оскільки "жир" @ще простіше бачить, звідки починаються / закінчуються окремі частини заяви.
DevSolar

@DevSolar Я знайшов :%s#/home/martin/test#/home/jake/x#роботи ще краще, але це лише особиста думка.
Золото Аміт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.