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
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
※コメント投稿者のブログIDはブログ作成者のみに通知されます