Vim, 指定したパターンにマッチしない文字列を検索/置換する

正規表現の否定は\@!を使う。:help \@! 参照。ちなみにこれはzero-widthなマッチなのに注意。ふつうの否定とかないんですかね、まあいいけど。

例: バッファ内、 PATTERN にマッチしない行を REPLACEMENT で置き換える

:%s/\(PATTERN\)\@!.*/REPLACEMENT/

追記: :vコマンドを使う

上の例だと

:%v/PATTERN/s/.*/REPLACEMENT/

:vの詳細は:help :vを熟読のこと。
:g!と等価のコマンドで、「指定したパターンにマッチしない各行に対して以下のコマンドを実行する」というコマンド。
thanks>mattn