Vim, 指定したパターンにマッチしない文字列を検索/置換する
正規表現の否定は\@!を使う。:help \@! 参照。ちなみにこれはzero-widthなマッチなのに注意。ふつうの否定とかないんですかね、まあいいけど。
例: バッファ内、 PATTERN にマッチしない行を REPLACEMENT で置き換える
:%s/\(PATTERN\)\@!.*/REPLACEMENT/
追記: :vコマンドを使う
上の例だと
:%v/PATTERN/s/.*/REPLACEMENT/
:vの詳細は:help :vを熟読のこと。
:g!と等価のコマンドで、「指定したパターンにマッチしない各行に対して以下のコマンドを実行する」というコマンド。
thanks>mattn