VIを使用して、次のステートメントを検索および置換するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/823484

  •  05-07-2019
  •  | 
  •  

質問

次のものを交換する必要があります:

CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`

to

CREATE TABLE IF NOT EXISTS `access`

試しました

:%s/\/\*\!\d+(.*)\*\//\1/g

しかし、それはうまくいかなかったようです。私は何を間違えていますか?

役に立ちましたか?

解決

vimにはバックスラッシュ+が必要です(または代わりに*を使用します)。また、vimでグループ化括弧をバックスラッシュする必要があります。したがって:

:%s/\/\*\!\d\+\(.*\)\*\//\1/g

はい、vimの古いスタイルのposix正規表現は:/

編集:以下のコメントで述べたように、\ +としてエスケープすると+は機能します。そして、\ dは実際にサポートされています、おっと。これを修正するために正規表現の例を編集しました。より簡潔で読みやすいバージョンについては、Brian Carperの例を参照してください。

他のヒント

「非常に魔法」を使用し、デフォルト以外の区切り文字を使用して、読みやすく(そして覚えやすく)します。

:%s@\v/\*!\d+(.*)\*/@\1@g

「非常に魔法」なしで + および()の前にバックスラッシュを配置する必要があります(ただし、 * などの前には配置しないでください)。あまり一貫性がありません。

[^ *] +を使用すると若干異なり、より効率的です:-)

1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top