Usr_26

Nvim の :help ページは、こちらソースから tree-sitter-vimdoc パーサーを使用して生成されました。


VIM ユーザーマニュアル - Bram Moolenaar 著
繰り返し
編集作業は、ほとんどの場合構造化されています。変更は、何度も行う必要があることがよくあります。この章では、変更を繰り返すためのいくつかの便利な方法について説明します。
26.1 ビジュアルモードでの繰り返し 26.2 加算と減算 26.3 多数のファイルでの変更 26.4 シェルスクリプトからの Vim の使用
次の章: usr_27.txt 検索コマンドとパターン 前の章: usr_25.txt フォーマットされたテキストの編集 目次: usr_toc.txt

ビジュアルモードでの繰り返し

ビジュアルモードは、任意の行のシーケンスを変更する場合に非常に便利です。強調表示されたテキストが表示されるため、正しい行が変更されているか確認できます。ただし、選択を行うには、いくつかのキー入力が必要です。「gv」コマンドを使用すると、同じ領域を再度選択できます。これにより、同じテキストに対して別の操作を実行できます。たとえば、「2001」を「2002」に変更し、「2000」を「2001」に変更したい行があるとします。
2001年の財務結果は良好です
2000年よりも。収入は50%増加しました。
2001年は2000年よりも雨が多かったにもかかわらず。
2000 2001
収入 45,403 66,234
最初に「2001」を「2002」に変更します。ビジュアルモードで行を選択し、以下を使用します。
:s/2001/2002/g
次に、「gv」を使用して同じテキストを再度選択します。カーソルがどこにあっても問題ありません。次に、「:s/2000/2001/g」を使用して2回目の変更を行います。明らかに、これらの変更を数回繰り返すことができます。

26.2 加算と減算

ある数値を別の数値に変更する操作を繰り返す場合、多くの場合、固定オフセットがあります。上記の例では、各年に1が追加されました。表示される年ごとに置換コマンドを入力する代わりに、CTRL-A コマンドを使用できます。上記のテキストと同じテキストを使用し、年を検索します。
/19[0-9][0-9]\|20[0-9][0-9]
次に、CTRL-A を押します。年は1つ増えます。
2002年の財務結果は良好です
2000年よりも。収入は50%増加しました。
2001年は2000年よりも雨が多かったにもかかわらず。
2000 2001
収入 45,403 66,234
「n」を使用して次の年を検索し、「.」を押して CTRL-A を繰り返します(「.」は入力が少し速いです)。表示されるすべての年について「n」と「.」を繰り返します。
複数追加するには、CTRL-A の前に数値を付加することで実行できます。次のリストがあるとします。
1. 4番目のアイテム
2. 5番目のアイテム
3. 6番目のアイテム
カーソルを「1.」に移動し、次のように入力します。
3 CTRL-A
「1.」は「4.」に変更されます。ここでも、「.」を使用して他の数値に対してこれを繰り返すことができます。
CTRL-X コマンドは、同様の方法で減算を行います。
CTRL-A および CTRL-X の動作は、'nrformats' の値によって異なります。たとえば、次を使用する場合
:set nrformats+=octal
「007」の上で CTRL-A を押すと、「007」が8進数として認識されるため、「010」に増えます。

26.3 多数のファイルでの変更

「x_cnt」という名前の変数があり、それを「x_counter」に変更したいとします。この変数は、いくつかのCファイルで使用されています。すべてのファイルで変更する必要があります。これはその方法です。関連するすべてのファイルを引数リストに入れます。
:args *.c
これにより、すべてのCファイルが検索され、最初のファイルが編集されます。次に、これらのすべてのファイルに対して置換コマンドを実行できます。
:argdo %s/\<x_cnt\>/x_counter/ge | update
「:argdo」コマンドは、別のコマンドである引数を取ります。そのコマンドは、引数リスト内のすべてのファイルで実行されます。後続の「%s」置換コマンドは、すべての行で機能します。これにより、「\<x_cnt\>」で単語「x_cnt」が検索されます。「\<」と「\>」は、単語全体のみを一致させるために使用され、「px_cnt」または「x_cnt2」は一致しません。置換コマンドのフラグには、同じ行で「x_cnt」のすべての出現箇所を置換するための「g」が含まれています。「e」フラグは、「x_cnt」がファイルに表示されない場合にエラーメッセージを回避するために使用されます。それ以外の場合、「:argdo」は「x_cnt」が見つからなかった最初のファイルで中止されます。「|」は2つのコマンドを区切ります。次の「update」コマンドは、ファイルが変更された場合にのみ書き込みます。「x_cnt」が「x_counter」に変更されていない場合は、何も起こりません。
また、「:windo」コマンドもあり、すべてのウィンドウで引数を実行します。また、「:bufdo」はすべてのバッファで引数を実行します。これは、バッファリストに予想よりも多くのファイルが含まれている可能性があるため、注意してください。「:buffers」コマンド(または「:ls」)でこれを確認します。

26.4 シェルスクリプトからの Vim の使用

多数のファイルがあり、文字列「-person-」を「Jones」に変更して印刷する必要があるとします。どうすればいいでしょうか?1つの方法は、多くのキー入力をすることです。もう1つの方法は、シェルスクリプトを作成して作業を行うことです。Vimエディターは、ノーマルモードコマンドを使用する場合、画面指向のエディターとして優れた機能を発揮します。ただし、バッチ処理の場合、ノーマルモードコマンドでは明確でコメント付きのコマンドファイルは作成されません。したがって、ここでは代わりにExモードを使用します。このモードでは、バッチファイルに簡単に配置できる優れたコマンドラインインターフェイスが提供されます。(「Exコマンド」は、コマンドライン(:)コマンドの別名にすぎません。)必要なExモードコマンドは次のとおりです。
%s/-person-/Jones/g
write tempfile
quit
これらのコマンドをファイル「change.vim」に入れます。次に、バッチモードでエディターを実行するには、次のシェルスクリプトを使用します。
for file in *.txt; do
  vim -e -s $file < change.vim
  lpr -r tempfile
done
for-doneループは、間の2行を繰り返すシェル構造であり、その間、$file変数は毎回異なるファイル名に設定されます。2行目は、ファイル$fileでExモード(-e引数)でVimエディターを実行し、ファイル「change.vim」からコマンドを読み取ります。-s引数は、Vimをサイレントモードで動作させるように指示します。言い換えれば、:promptやその他のプロンプトを出力し続けないでください。「lpr -r tempfile」コマンドは、結果の「tempfile」を印刷して削除します(-r引数がそれを行います)。

標準入力からの読み取り

Vimは、標準入力でテキストを読み取ることができます。通常の方法はそこでコマンドを読み取ることなので、代わりにテキストを読み取るようにVimに指示する必要があります。これは、ファイルの代わりに「-」引数を渡すことで行われます。例
ls | vim -
これにより、最初にテキストをファイルに保存せずに、「ls」コマンドの出力を編集できます。標準入力を使用してテキストを読み取る場合は、「-S」引数を使用してスクリプトを読み取ることができます。
producer | vim -S change.vim -

ノーマルモードスクリプト

スクリプトでノーマルモードコマンドを本当に使用したい場合は、次のように使用できます。
vim -s script file.txt ...
注: 「-s」は「-e」なしで使用すると意味が異なります。ここでは、ノーマルモードコマンドとして「script」をソースすることを意味します。「-e」と組み合わせて使用すると、サイレントであることを意味し、次の引数をファイル名として使用しません。
「script」のコマンドは、入力したように実行されます。改行は <Enter> キーを押すこととして解釈されることを忘れないでください。ノーマルモードでは、カーソルは次の行に移動します。スクリプトを作成するには、スクリプトファイルを編集してコマンドを入力できます。結果がどうなるかを想像する必要がありますが、少し難しい場合があります。別の方法は、手動で実行中にコマンドを記録することです。これはその方法です。
vim -w script file.txt ...
入力されたすべてのキーが「script」に書き込まれます。小さな間違いをした場合は、続行して後でスクリプトを編集することを覚えておけば大丈夫です。「-w」引数は、既存のスクリプトに追加します。これは、スクリプトを少しずつ記録したい場合に便利です。最初からやり直したい場合は、「-W」引数を使用します。これにより、既存のファイルが上書きされます。
次の章: usr_27.txt 検索コマンドとパターン
著作権: manual-copyright を参照してください。 vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンドインデックス
クイックリファレンス