2012-05-04 12 views
5

を交換して貼り付け、すべてのテキストをコピーします。Vimの:複数のファイルの場合:私はVimを使用して複数のファイルに対して次の操作を実行したい

  1. コピーし、各ファイル内のすべてのテキスト
  2. は、いくつかのテキスト
  3. 貼り付けを交換してください

    :各ファイル
  4. の最後にコピーされたテキストは、ここで

を1つのファイルのための私のコマンドです他のいくつかのテキストを置換します

:%y 
:%s/old1/new1/g 
:G 
:P 
:%s/old2/new2/g 

誰も私にそのような構文を教えてもらえますか?特に私はVimを初めて使っています!

argdoは複数のファイルに対してコマンドを実行できることがわかりました。テキストを置き換える際にargdoを使用する例がたくさんありますが、%y、:G、または:argdoを使用する構文が見つかりませんでした。P

ありがとうございました。

答えて

4

は、あなたが排他的な範囲で作動することがあります良いチャンス(初回のみに最初の置換を行うにはもあります

:argdo %y | %s/old1/new1/g | $pu | %s/old2/new2/g 

コマンド一部、そして唯一の第二の二):

:argdo $mark a | %co$ | 1,'a s/old1/new1/g | 'a,$s/old2/new2/g 

は、非マッチング置換を許可s///eを追加して、はるかに高速多くのファイルの場合の動作をするためにsilent!を追加します。


:silent! argdo $mark a | %co$ | 1,'a s/old1/new1/ge | 'a,$s/old2/new2/ge 
(argdo ノートでは、デフォルトではExコマンドリストを見込んでいます。あなたは、通常モードを使用するなどargdo norm! ggyGを使用したいコマンド

一つは、一時的な関数を作成する必要はありません
+0

それは素晴らしいです!それは働いています 私は最初のコマンドに| wを追加しました :argdo%y | %s/old1/new1/g | $ pu | %s/old2/new2/g | w – Pansy

+1

@Pansy。そのとおり。いいですよ。私はいつも ':autowrite autoread'を有効にしています(残ったアンドゥとバージョンコントロールを残しておきます) – sehe

+1

元のテキストの1つのコピーに対して2つの置換のそれぞれを実行する必要がある場合は、マークの設定を避けることができます手動で ':argdo%y |%s/o1/n1/g | $ pu | '[、$ s/o2/n2/g'を入力します。 –

3

UPD:私のVim-fuは、@ ibのものや@ seheのものほど強力ではないので、私のものではなく、提案したソリューションを使用することをお勧めします。

しかし、私の解決策は個人的に私のために(Vimの見習いとして)編集してデバッグする方が簡単なので、とにかくここにいてください。


あなたは、以下の一時的な機能を追加することができ、あなたのvimrc

function! MyTmpFunc() 
    :%y 
    :%s/old1/new1/g 
    normal! G 
    normal! P 
    :%s/old2/new2/g 
endfunction 

次に、以下のコマンドを使用すると、(vim myfile1.txt myfile2.txt myfile3.txtのようなもの)に影響を与えるために必要なファイルでVimを再起動し、実行します

:argdo call MyTmpFunc()

これはあなたの質問で説明したとおりです:function MyTmpFunc() w Vimに与えられた各引数に対して呼び出されることがあります。

これでvimrcからMyTmpFunc()を削除できます。

また、:bufdoもあります。開かれたバッファごとにいくつかのコマンドが呼び出されます。 :windoもありますが、それぞれのウィンドウでコマンドを実行しますが、個人的には最も有用なのは:bufdoです。

また、各バッファで1つのコマンドを実行する必要がある場合は、一時的な機能を作成する必要はありません。

:bufdo %s/old1/new1/g

、それはそれだ。あなただけの各バッファ内に「new1」「old1」を交換する必要がある場合は、次のコマンドを実行することができ、と言います。私は元でこれを行うだろうと述べた@ib同様

+4

':argdo%y |%s/o1/n1/g | $ pu |%s/o2/n2/g'といういくつかのExコマンドを実行します。 –

+0

@ ibはいつものように、それは答えに値するものです。私は – sehe

+0

@ ibにいくつかのアイデアを追加しました。ええ、私のVim-fuはそれほど強くない、悪いです。しかし、私が提案した方法は、(Vimの見習いとして)私のために個人的に編集してデバッグする方が簡単なので、とにかくここに来らせてください。 (私も私の答えを更新しました) –

関連する問題