vi 1

viのコマンド

viには多くのコマンドがあるが、その中から覚えておくと便利なコマンドについて練習して行こう。
viには非常に多くのコマンド・機能があるので、すべてを紹介するのは不可能だが 基本的な、ぜひ覚えておいて欲しいコマンドを中心に紹介してゆく。

サンプルデータ

まず、練習用にサンプルのデータファイルをunixディレクトリに保存する。

  1. 上のサンプルデータをマウス右ボタンでクリックする。
  2. 出て来たメニューから「リンクを名前を付けて保存」を選ぶ。
  3. 表示されたファイルダイアログの「ドキュメントの保存形式」を「テキスト」にする。
  4. 「選択」の部分を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行中のみ)

削除コマンド

文字の削除もxddだけではなく様々なコマンドの使い方を覚えておくと良い。

(文字数)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回コピーする

コピー方法

  1. カーソルをコピー元へ移動する。
  2. y コマンドでヤンクする。
    一行コピーなら yy 、5 行コピーなら 5yy など。
  3. カーソルをコピーしたい位置へ移動する。
    行単位のコピーの場合は、コピーされる行の1行上( p )または下( P )、 その他の場合はコピーされる場所の左( p )または右( P )の文字の上へ移動。
  4. p または P コマンドでコピーする。

移動方法

  1. カーソルを移動したい文字列のところへ移動する。
  2. 文字列削除コマンド( dd など)で移動させたい文字を消去する。
  3. カーソルを移動したいところへ移動する。
    行単位のコピーの場合は、コピーされる行の1行上( p )または下( P )、 その他の場合はコピーされる場所の左( p )または右( P )の文字の上へ移動。
  4. p または P コマンドで消去された文字列が現れる。

バッファとは

バッファとは、 vi の中にある一時的なデータの格納場所である。
バッファにコピーされた文字は、新しい文字がコピーされてくるまでは残っている。 しかし vi を終了すればすべて消えてしまう。

詰め vi

以下の問題の左から右の内容に書き換えるために、どのように vi のコマンドを実行するのが最もキー入力か少ないだろうか。

条件

問題

練習課題

参考


Prev
Home | Contents
abe@injapan.net