というように1行内に複数マッチする場合でも最初にマッチした文字列しか置換されません。 1行内でマッチした文字列すべてを置換したい場合は :%s/hoge/fuga/g と最後にgを入れれば解決です。 更にマッチした文字列を1つずつ確認しながら置換する場合は :%s/hoge/fuga/c と最後にcを入れればいいだけです。 なので :%s/hoge/fuga/gc とすればファイル内すべてのマッチした文字列を確認しながら置換できます。 また置換を行う行の範囲を指定したい場合は :10,20s/hoge/fuga/gc といったように指定すれば10-20行の間に存在するマッチした文字列のみを置換することができます。 こちらもどうぞ vimで一気にコメントアウトする方法(複数行の先頭に文字を追加する方法) [vimで任意の文字列が含まれる行を一括で削除する方法] (http://qiita.c