vi 1
viのコマンド
viには多くのコマンドがあるが、その中から覚えておくと便利なコマンドについて練習して行こう。
viには非常に多くのコマンド・機能があるので、すべてを紹介するのは不可能だが
基本的な、ぜひ覚えておいて欲しいコマンドを中心に紹介してゆく。
サンプルデータ
まず、練習用にサンプルのデータファイルをunixディレクトリに保存する。
- 上のサンプルデータをマウス右ボタンでクリックする。
- 出て来たメニューから「リンクを名前を付けて保存」を選ぶ。
- 表示されたファイルダイアログの「ドキュメントの保存形式」を「テキスト」にする。
- 「選択」の部分をunixディレクトリのtest1.cというファイル名に変更して「OK」ボタンを押す。
カーソル移動コマンド
カーソル移動コマンドはviで最も良く使うコマンドであり、作業効率を大きく左右する。
カーソルを移動する場合、h, j, k, l 以外のコマンドを知っておくと素早く移動できる。
- h
- 1 文字分左へ移動
(←キーと同じ)
- l
- 1 文字分右へ移動
(→キーと同じ)
- j
- 1 行分下へ移動
(↓キーと同じ)
- k
- 1 行分上へ移動
(↑キーと同じ)
- Ctrl+f
- 1画面分進む
- Ctrl+b
- 1画面分もどる
- :行番号
- 行番号G
- 行番号の行へ移動する。
行数を打たないでGだけを打ち込むとそのファイルの最後の行へ移動する。
- w
- 一単語分、右へ移動。
- b
- 一単語分、左へ移動。
- 0 ← 数字の 0
- 行の先頭へ移動。
- $
- 行末へ移動。
- %
- 対応する括弧に移動
( ), { }, [ ]などの一方の括弧にカーソルを置いて、このコマンドを
使用すると対応する括弧にカーソルが移動する。
もし、対応する括弧が無ければ移動しない。
カーソル移動コマンドの例
各コマンドの直前に数字を入力すると、そのコマンドを数字分打ち込んだのと同じ結果になる。
( 0 以外)
- 5l
- 5文字分右へ移動
- 3w
- 3単語分右へ移動
- 6$
- 5行下の一番右の文字へ移動
サーチコマンド
特定の文字列を探す時は以下のサーチコマンドを使用すると効率が良い。
文字列のサーチ
- /文字列/
- 下方向に文字列をサーチ
- ?文字列?
- 上方向に文字列をサーチ
- *
- カーソルをサーチしたい文字列の上に移動して * を押すと、その文字列を下方向にサーチする。
- n
- 同じ文字列を同じ方向にサーチ( /文字列/または ?文字列?の後で有効)
- N
- 同じ文字列を反対方向にサーチ( /文字列/または ?文字列?の後で有効)
文字のサーチ
- f
- 右方向に文字を探す(1行中のみ)
- F
- 左方向に文字を探す(1行中のみ)
- ;
- 同じ文字をもう一度探す(1行中のみ)
削除コマンド
文字の削除もxとddだけではなく様々なコマンドの使い方を覚えておくと良い。
- (文字数)x
- 文字数分削除
- (行数)dd
- カーソルのある行から、指定された行数だけ削除する。
- d
- カーソルのある位置から、指定された所まで削除する。
- D
- カーソルのある位置から行末までを削除する。
dコマンドの例
- 3x
- カーソルのある位置から、3文字分削除
- 5dd
- カーソルのある行から、5行削除
- d$
- カーソルのある位置から行末( $ )までを削除
( D コマンドと同じ )
- dfb
- カーソルのある位置から b という文字の部分( fb )までを削除
書き換えコマンド
- (行数)cc
- 行数分書き換え
- c(範囲)
- 範囲の部分を書き換え
c コマンドの例
- 5cc
- カーソルのある行から5行分書き換える
- cw
- カーソルのある文字から一単語分(スペース、タブ、Enter、英数字以外の文字があるまで)書き換える
- cfa
- カーソルのある文字から文字 a があるところまで書き換える
- cG
- カーソルのある行からファイルの最後の行まで書き換える
コピーと移動
vi である文字をコピーするには、 y コマンドと p または P コマンドの組合せで行なう。
y コマンドはヤンクコマンドと言って、ファイル上の文字をバッファの中にコピーするコマンドである。
また、移動させる時は dd などの文字を削除するコマンドによって削除された文字を p または P コマンドによって移動する。
y コマンド
- yy
- カーソルのある行を一行分ヤンクする。
- 10yy
- カーソルのある行から10行分ヤンクする。
- yw
- カーソルの文字から1単語分ヤンクする。
- yfa
- カーソルの文字から文字 a のところまでをヤンクする。
- yl
- カーソル上の1文字をヤンクする。
p コマンド
pまたは P コマンドは y コマンドとは逆にバッファに入っている文字をファイルのカーソルのある場所の下または上にコピーするコマンドである。
- p
- カーソルのあるところにバッファの内容をコピーする
(行単位だとカーソルのある行の一行下、その他の場合はカーソルの右側)
- P
- カーソルのあるところにバッファの内容をコピーする
(行単位だとカーソルのある行の一行上、その他の場合はカーソルの左側)
- 3p
- カーソルのあるところにバッファの内容を3回コピーする
コピー方法
- カーソルをコピー元へ移動する。
- y コマンドでヤンクする。
一行コピーなら yy 、5 行コピーなら 5yy など。
- カーソルをコピーしたい位置へ移動する。
行単位のコピーの場合は、コピーされる行の1行上( p )または下( P )、
その他の場合はコピーされる場所の左( p )または右( P )の文字の上へ移動。
- p または P コマンドでコピーする。
移動方法
- カーソルを移動したい文字列のところへ移動する。
- 文字列削除コマンド( dd など)で移動させたい文字を消去する。
- カーソルを移動したいところへ移動する。
行単位のコピーの場合は、コピーされる行の1行上( p )または下( P )、
その他の場合はコピーされる場所の左( p )または右( P )の文字の上へ移動。
- p または P コマンドで消去された文字列が現れる。
バッファとは
バッファとは、 vi の中にある一時的なデータの格納場所である。
バッファにコピーされた文字は、新しい文字がコピーされてくるまでは残っている。
しかし vi を終了すればすべて消えてしまう。
詰め vi
以下の問題の左から右の内容に書き換えるために、どのように vi のコマンドを実行するのが最もキー入力か少ないだろうか。
条件
- 最初、カーソルは a の所にあるとする。
- 一度キーを入力するのを1 手とする。
(キーを押し続けるのは無し)
- 最期にファイルをセーブして vi を終了するコマンド(:wqなど)は含まない。
問題
- 3 手以内
- 4 手以内
aaa
bbb
ccc
|
→
|
bbb
ccc
aaa
|
- 7 手以内
aaa
bbb
ccc
|
→
|
ccc
bbb
aaa
|
- 11 手以内
aaa
bbb
ccc
ddd
|
→
|
ddd
ccc
bbb
aaa
|
- 5 手以内
- 21 手以内 (このページに解説されていないコマンドを使用して14 手以内でできれば中級以上)
- 12 手以内
aaa bbb ccc
|
→
|
ccc bbb aaa
|
練習課題
参考
Prev
Home | Contents
abe@injapan.net