VIを使用して、次のステートメントを検索および置換するにはどうすればよいですか?
質問
次のものを交換する必要があります:
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
所属していません StackOverflow