複数のファイルでアクションのシーケンスを同時に実行する必要がある場合があります。 もちろん、これにはさまざまなツールを使用できます(オフハンド:bash + sed / awk、python / perl、...)-一部はタスクに適さない場合があります。 次に、Vimエディターツールを使用してこのような単純なタスクを解決する例を検討します。
簡単な例を考えてみましょう。各ファイルの先頭に行を挿入します。
この単純なタスクの過程で、Vimを使用する際に微妙な違いが生じることがありますが、この素晴らしいエディターを使用する際には、その知識が必要かつ有用である可能性があります。 同時に、この例では、初心者が実際にVimレジスタとマクロの使用を統合できるようにします。
それでは始めましょう:
1.エディターで、変更が必要なすべてのファイルを開きます。
$ vim -o file1.txt file2.txt file3.txt
-oオプションを使用すると、各ファイルを個別のウィンドウで開くことができます。 この例でのこのオプションを使用した起動は、わかりやすくするため(すべての変更がすぐに表示されるようにするため)に加えて、以下で説明するもう1つのポイントに基づいて行われました。
2.マクロ内のファイルに対して実行する必要がある一連のアクションを書き留めます。
qm1GO最初の行<ESC> qu
qm-レジスターmでのマクロ記録の開始
1G-ファイルの最初の行に移動
O (大文字のラテン文字O)-編集モードに移行して現在の行の前に行を挿入します
最初の行は最初の行の内容です
<ESC> -編集モードを終了します
q-マクロ記録の終わり
u-行われた変更の重複を避けるために、現在のウィンドウの変更を破棄します
3.すべてのウィンドウでmマクロを実行します。
:普通の@m
windo-すべてのウィンドウでvimコマンドを実行するコマンド
normal-コマンドラインからvim通常モードコマンドを実行するコマンド。つまり、2つのマクロ開始コマンドは同等です。
@m
:通常の@m
ちょうどこれをした場合:
:ウィンド@m
「これは編集者のチームではありません」というエラーメッセージが表示されます
実際、各ウィンドウで次のアクションを実行します。
:@m
これは 、コマンドラインで通常モードのコマンドを実行するときに間違っています。 その結果、エラーメッセージまたはエディターの予測不能なアクションを受け取る可能性があります。
次のようなコマンドがあります:windo :
:argdo
:タブー
:ブフド
最初のコマンドはargdoです。 名前付き引数として指定されたファイルのリストでコマンドを実行できる強力なコマンド。 ここでは考慮しません。
2番目のコマンドはtabdoです。 これはwindoと完全に似ていますが、開いているすべてのタブですべての作業を行います。 ここで言及する価値のある点が1つあります。各タブには複数のウィンドウがあります。 そのため、変更は各タブの現在のウィンドウでのみ行われます!
さて、最後に、3番目のチーム- :bufdo 。 すべてのバッファでコマンドを実行します。 しかし、それを使用する際には注意点が1つあります。 bufdoコマンド自体は現在のバッファーでのみ実行され、「有用な」コマンド(bufdoが実行し、各バッファーで実行されるコマンド)がテキストを変更すると失敗します。
たとえば、次のように:
:bufdo normal G
すべてのバッファで正常に実行されます
そしてこのように:
:bufdoの通常のGoEndファイル
すでに失敗します。 動作させるには、これを行う必要があります:
:bufdo! 通常のgoendファイル
実際、今日は以上です。 ハブへの最初の投稿では、キックしないでください。 訂正、追加、コメントを歓迎します。