やっぱりvi(2)

|

前回、viに関する記事を書いたので、それに続けて、私がよく使う機能を紹介したいと思います。

コーディングを行っているとよくコピー&ペーストを行うと思います。
その際は、単純にマウスで範囲選択して、コピー&ペーストを行うと言うのが一般的ではないかと思いますが、viの機能でもそのような事が出来ます。
利点は、キーボードから手を離す必要がなく、複数のコピーを保持しておけると言う点です。

まずは、単純に複数行をコピー&ペーストする例です。

例として、次のような3行が記述されているファイルを想定します。
---------------
ABC
DEF
GHI
---------------

この3行をコピーして、最終行の後にペーストします。
[Esc]キーを押してコマンドモードになっていると言う状態から始めます。

1. [1G] キーを押す。
意味: ファイルの先頭にカーソルを移動する。

2. [3yy] キーを押す。
意味: カーソル位置から3行を記憶する。

3. [G] キーを押す。
意味: ファイルの最終行にカーソルを移動する。

4. [p] キーを押す。
意味: 先程記憶した3行をカーソル位置の次の行に貼り付ける。

結果:
---------------
ABC
DEF
GHI
ABC
DEF
GHI
---------------

この方法ですと、別の行を記憶した場合、前述の3行は上書きされてしまいます。
コピー内容を保持しておく為には、名前付きのバッファにコピーする必要があります。
バッファの名前としては、アルファベット1文字が割り当てられています。

次にバッファbに3行をコピーしてペーストする例を記述します。
(条件は最初の例と同様です。)

1. [1G] キーを押す。
意味: ファイルの先頭にカーソルを移動する。

2. ["b3yy] キーを押す。
意味: バッファbにカーソル位置から3行を記憶する。

3. [G] キーを押す。
意味: ファイルの最終行にカーソルを移動する。

4. ["bp] キーを押す。
意味: バッファbに記憶した3行をカーソル位置の次の行に貼り付ける。

これにより、別の行を名前なしのバッファにコピーしてもバッファbの内容は保持されます。
これを応用し、複数のコピー&ペーストを行う例を記述します。

1行目と3行目をそれぞれバッファbとバッファcにコピーしてペーストします。
(条件は最初の例と同様です。)

1. [1G] キーを押す。
意味: ファイルの先頭にカーソルを移動する。

2. ["byy] キーを押す。
意味: バッファbにカーソル位置の行を記憶する。

3. [2j] キーを押す。
意味: 現在行から2行下にカーソルを移動する。

4. ["cyy] キーを押す。
意味: バッファcにカーソル位置の行を記憶する。

5. ["bp] キーを押す。
意味: バッファbに記憶した行をカーソル位置の次の行に貼り付ける。

6. ["cp] キーを押す。
意味: バッファcに記憶した行をカーソル位置の次の行に貼り付ける。

結果:
---------------
ABC
DEF
GHI
ABC
GHI
---------------

最後に複数行をコピーする場合の別の方法を紹介します。
前述では、3行をコピーしましたが、行数が多くなると、何行コピーしたいと言うよりはここからここまでコピーしたいと考えると思います。
その例として、ABCの行からGHIの行までをバッファbにコピーしてペーストする方法を記述します。
(条件は最初の例と同様です。)

1. [1G] キーを押す。
意味: ファイルの先頭にカーソルを移動する。

2. [ma] キーを押す。
意味: マークaにカーソル行の位置を記憶する。

3. [2j] キーを押す。
意味: 現在行から2行下にカーソルを移動する。
(実際は、何行下にあるか解らないので、jキー等の移動キーで、GHIの行まで移動する。)

4. ["by'a] キーを押す。
意味: バッファbにマークaの行からカーソル行までを記憶する。

5. [G] キーを押す。
意味: 最終行にカーソルを移動する。

6. ["bp] キーを押す。
意味: バッファbに記憶した行をカーソル位置の次の行に貼り付ける。

結果:
---------------
ABC
DEF
GHI
ABC
DEF
GHI
---------------

上記2で、カーソル行の位置を記憶しましたが、これは、コピーの場合だけでなく、カーソルの移動にも使用出来ます。使用方法は、'+マーク名で、上記の例ですと['a]を入力する事で、ABCの行にカーソルを移動出来ます。

長くなりましたが、この機能を使う事で、複数個所のコードを一箇所にまとめたり、記憶した内容を繰り返し利用する場合などに便利だと思います。