2011-12-24 17 views
0

たとえば、 "foo"を含む現在のディレクトリの下のすべてのファイルを検索し、 "bar"に置き換えるタスクがあります。今ここ
は私の現在のソリューションです:
:vim /bar/ **/*
使用このfooのすべての出現を検索し、「バー」にそれを一つ一つを置き換えるために
:s/foo/bar/gc
明らかにそれは置き換えが大きくなると良い解決策ではありません。したがって、これらの2つの操作を1つにまとめる方が良いソリューションがあれば。しかし、前提条件があります:2番目のコマンドでcと同じように置き換えの前にヒントを与えなければなりません。これは、交換する必要のない単語を置き換えるのを防ぐためです。 vimの中結合方法:vimと:s in vim

答えて

0

最も簡単には次のようになります。

vim $(egrep -l '/foo/' **/*) -c 'bufdo %s/foo/bar/g' 

しかし、これはファイル名に空白があると失敗します。より堅牢なアプローチは次のようになります。

files=() 
while IFS= read -rd '' filename; do 
    files+=("$filename") 
done < <(egrep -Zl '/foo/' **/*) 
vim "${files[@]}" -c 'bufdo %s/foo/bar/g'