Section Next | Prev


1.7 テキストのコピーと移動

vi エディタがもつ作業領域はバッファとよばれ、唯一メインバッファの内容が画面 に表示されています。メインバッファ以外にサブバッファと呼ばれる領域があり、 サブバッファは更に2つのバッファ(名前付、名前なし)に分類されます。
サブバッファを利用して、データのまとまった複写や移動が可能となりますが、 ファイルを切り替えても有効なのは名前付バッファです。
名前なしバッファ
削除・コピーコマンドで削除・コピーされたテキストを収納しているバッファ。 レジスタ1番から9番があります。

名前付きバッファ
一時的に任意のテキストを格納するバッファで、 a から z までの名前を持っています。
またA .. Z のように大文字を指定すると、そのバッファへの追加書き込みを意味します。
概要の図参照のこと。

1.7.1 削除の復活

名前なしバッファは暗黙のうちに使用されるバッファで、削除を行ったときにその 内容を随時記録しています。
特定の範囲で削除した内容を別の場所に追加する例(カット&ペースト)
		abc def (p.10)
			# カーソル位置が'(' のとき、d%で、対応する括弧までを削除
		abc def 
			# 0P で先頭まで移動し、直前に削除した内容を追加
		(p.10)abc def 
名前なしバッファは全部で9コあり、削除コマンドが実行される度に1番目のバッファ に削除されたデータが記録されます。
また既にバッファに何かデータが記録されている場合は、古い1番バッファの内容は2 番へ、2番の内容は3番へ... といった具合に1つづつ入れ換えが生じます。
	
この記録されたバッファの内容を利用すれば、削除したデータの復活が可能です。
名前なしバッファの内容をメインバッファへ複写するには p コマンドを使用します。
名前なしバッファの番号を指示する "(ダブルクォーテション)と共に以下のように 使用します。
	"1p  : 1番バッファを複写
	"2p  : 2番バッファを複写
また .(小数点) コマンドは、直前のコマンドを繰り返すコマンドですが "np の 場合は特別に n の部分を順番に1つづつ加算します。
したがって、"1p と一回実行すれば .(小数点) を繰り返し入力することで、最大9コの 削除情報を復活することができます。

1.7.2 カット&ペースト

名前付バッファは明示的にバッファ名(英字1文字)を指定できます。 バッファ名が小文字の時はバッファの内容は上書きされ、大文字の時は追加されます。

名前なしバッファと同様、バッファ名を指定するには "(ダブルクォーテーション)を 用います。例えば バッファA の内容をコピーするには "ap とします。

バッファ操作コマンドを以下にまとめます。

コマンド解説
y メインバッファから、指定されたバッファへデータを複写します(コピー)。
d メインバッファから、指定されたバッファへデータを移動します(カット)。
その際メインバッファからデータは削除されます。
p(小文字) 指定されたバッファの内容をメインバッファへ複写します(ペースト)。
バッファの内容が行単位なら、下の行へ。
文字/単語単位であればカーソルの後ろに挿入されます。
P(大文字) p と同じですが、挿入位置が逆転します。
行単位では上へ、文字/単語単位であればカーソルの直前に挿入されます。
つぎは簡単な例題です。
"ayy
カレント行1行を名前付きバッファの a に格納する。
"byw
カーソルのいる単語を名前付きバッファの b に格納する。
"cyl
カーソルのいる文字を名前付きバッファの c に格納する。
	
また既にあるバッファの内容に追加する場合は、バッファ名を大文字にします。 小文字の場合は常に新しく内容が更新されます。

1.7.3 ファイル間のカット&ペースト

名前付きバッファを利用すれば、ファイルを股がってカット(コピー)/ペーストが できます。 たとえば common.c の一部をバッファに溜め sample.c へ複写するには以下のように なります。
	
  1. common.c の取り込み
    まず e コマンドで、common.c をメインバッファに取り込みます。
    vi 起動時にこの操作を行うのであれば vi common.c でもかまいません。
    	:e common.c  又は $ vi commmon.c
    
  2. 必要な部分のコピー
    この例ではバッファ a に common.c 一部分をコピーします。
    	"a2yy
    
  3. sample.c の取り込み
    次のファイルを e コマンドで取り込みます。
    	:e sample.c
    
  4. バッファの複写
    common.c でバッファA に取り込んだ内容を複写します。
    	"ap
    
補足
Windows 版の vim では、Windows 標準のコピーバッファとは次の操作で やり取り可能です。
キー操作解説
[Alt] + VWinBuff を vim メインバッファへ
" @ yyvim メインバッファの1行を WinBuff へ
* WinBuff: Windows アプリケーションのカット&ペーストバッファ

Section Next | Prev

Copyright ycosSystems 2007, vi/Body17.html