代替コマンドでスラッシュ(/)を感嘆符(!)に置き換えるとはどういう意味ですか?


13

私は最近、著者が次のようなものに/置き換えた代替コマンドを見ました!:s!abc!ABC!g

この使用法に関するドキュメントを見つけようとしましたが、関連するものは見つかりませんでした。それで、私は自分で実験してみましたが、2つのサインの本当の違いを理解できませんでした。ここに私が見つけたものがあります:

  • これは、混在させることはできません!し、/コマンドで。たとえば、: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!

2番目の形式は明らかに読みやすいです。

これが、区切り文字を変更できる唯一の理由です。人間にとって読みやすくするために。コンピューターは気にしません。

いくつかの他のプログラムはさらに柔軟性があります。sedたとえば、GNU では、必要に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#さらに良い作品を見つけましたが、それは単なる個人的な意見です。
アミットゴールド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.