2016-05-24 8 views
3

vimの複数のファイルで同じ検索を適用して置き換えることはできますか?私は下の例を挙げます。vimを使用して複数のファイルを検索して置換する

複数の.txtファイル - sad1.txtsad5.txtがあります。それらを開くには、私はvim sad*を使用し、それはすでに開いています。今すぐ5 txtファイルの中には、happy999のような類似の単語があります。 happy111に変更したいと思います。私は現在、このコードを使用しています:

argdo %s/happy999/happy111/gc | wq! 

は、最終的にのみsad1.txtが変更されます。 5つのtxtファイルで1つのスクリプトを実行するにはどうすればよいですか?

+0

あなたは 'vi'または' vim'を使用していますか? 'vi'だけを入力すると、' vim'バナーメッセージが表示されますか? 'wq! 'はあなたの問題を引き起こしているかもしれません。私はそれを実行する前に ':set aw'(自動書き込み)を使います。 'vim'を使用している場合は':help argdo'を参照してください。これは普通の 'vi'以上の拡張として文書化されているからです。 –

+1

「argdo」の存在を知らせてくれてありがとう。 –

+0

マッピングを利用することもできます。 :地図:%s /ソース/ターゲット/ g :w! :next SibiCoder

答えて

2

用途:

:set aw 
:argdo %s/happy999/happy111/g 

最初の行は、自動書き込みモードを設定し、そのときファイルを切り替えると、vimは変更されたファイルを書き出します。

2行目は、グローバル検索と置換を行います。

終了するので、wq!を使用しないことに注意してください。あなたは、自動書き込みを使用したくない場合は、使用できます。これは、最初のファイルを編集するの末尾にvimを終了することを回避する

:argdo %s/happy999/happy111/g | w 

vivimについてのご質問は、vi and vimをご覧ください。

+0

私はいつも 'argdo'を'恐れて '' '' '' '' '' '' ''範囲なし ''にしました。私は有用な何かを学んだ、ありがとう。 – grochmal

+0

こんにちはジョナサン。できます。ありがとうございました。フォローアップの質問。私は質問したい。書き込みや保存が可能な場合は?私は毎回awを設定する必要がありますか? –

+0

通常、vimセッションごとに1回、「aw」を設定します。私はあなたが「書く」と「救う」という意味を理解していません。どうか明らかにしてください。 –

1

これはsed -i-iの "in place"の場合、GNU sedでのみ動作する)のタスクです。

for i in sad*.txt; do 
    vim -c ':%s/happy999/happy111/gc' -c ':wq' "$i" 
done 

/cます:シェルからいくつかの助けを借りて

:あなたは本当にvimを使用するか、確認する/cを必要がある場合しかし、あなたは二つの方法でそれを行うことができ、交換してくださいまだ動作し、Vimは私の謙虚な意見では()各確認のため、このラスを

または純粋なVIMで

vim -c ':%s/happy999/happy111/gc' -c ':w' -c ':n' \ 
    -c ':%s/happy999/happy111/gc' -c ':w' -c ':n' \ 
    -c ':%s/happy999/happy111/gc' -c ':w' -c ':n' \ 
    -c ':%s/happy999/happy111/gc' -c ':w' -c ':n' \ 
    -c ':%s/happy999/happy111/gc' -c ':wq' sad*.txt 

を聞いてきますtは1は恐ろしいと繰り返し見て、シ​​ェルfor上では実際の利点を持っていないが、それは純粋なvimがそれを行うことができることを示し)

+2

'vim'の' argdo'コマンドが役立つように見えます - 繰り返されるタイピングがなくても便利な仕事です。 –

1

間違いなく、argdoは素晴らしいですが、多くの定型文を入力するとかなり時間がかかります。 far.vimをお試しください。 これは、多くのIDEを提供するツールです。

enter image description here

関連する問題