どんなことでも

この人 blog を書くのだろうか?

vi : 名前付きバッファ

2007-09-29 01:22:28 | Unix
vi使用歴 10年の私が覚えていないコマンド。
Solaris 8 の /usr/bin/vi, /usr/xpg4/bin/vi で試しました。

名前付きバッファー
Solaris とかの vi では、編集ファイルを切り替えると y, Y で名前無しバッファーにヤンク(保存)したものは忘れられてしまいます。でも、名前付きバッファー(レジスター)にヤンクすると編集ファイルを切り替えても覚えていてくれます。
ということで、その使い方。

ヤンクする時「”○y」、「”○Y
 "ayG → カーソルから文末までを a レジスターにヤンクする。
 "aY → カレント行を a レジスターにヤンクする。
 "a10Y → カレント行から10行を a レジスターにヤンクする。

ペーストする時
 "ap → a レジスターからペーストする。

”○」で、レジスターの名前を指定して y or Y で、レジスタへヤンク。
”○」で、レジスターの名前を指定して p or P で、ペースト。

ed コマンドの場合
 :.,/any/y a → 今の行(.) から any がある行までを a レジスタへヤンク
 :put a → カーソルの位置に a レジスタを貼り付け。

実行例。ファイル「い」から、ファイル「ろ」へ一部コピー
方法1. 自動保存される名前付きバッファーを利用。
 vi を起動 『vi 「い」 「ろ」』
 コピーしたい部分を削除『dG』(カーソル行から文末)
 編集ファイルを「ろ」にする 『:n!』(「い」は保存しない)
 コピーしたい部分へ移動して貼り付け『"1p』

方法2. 明示的に名前バッファー(y レジスタ)を利用。
 vi を起動 『vi 「い」 「ろ」』
 コピーしたい部分をヤンク『"yy$』(カーソルの位置から行末まで)
 編集ファイルを「ろ」にする 『:n』(「い」は保存しない)
 コピーしたい部分へ移動して貼り付け『"yp』


レジスターの名前は a~z がユーザが自由に使える部分、0~9 はエディターが削除した文字列を自動保存します。
これで、vi のみでファイルA からファイルB へコピーすることができます。(X のウィンドウを 2つ開いたり、screen でコピーしなくても良いわけです) 普段は、FreeBSD 上で jelvis を使っているので、ファイルを切り替えても名前無しバッファーが引き継がれ、覚える必要がありませんでした。

マーク
 カーソルの位置を覚えさせて、そこへジャンプすることができる。
今のカーソルの位置を記憶させる。「m○
 ma → マークa に位置を覚えさせる。
マーク○の位置へ戻る「`○
 `a → マークa の位置へ戻る。
マーク○の行頭へ戻る「’○
 'a → マークa の行頭へ戻る。

:set nu=on と、行番号を表示させて行番号を覚えていたので、マークは使わなかった。忘れた時にマークの方が、簡単に思い出せると思うけど。

参照: vi(1) HP-UX 11i Version 2: September 2004
Elvis 2.1 Cut Buffers

最新の画像もっと見る

コメントを投稿