入門vi

入門vi 第6版

入門vi 第6版


4/9買ってきた。ちゃんと使えるようになろう。

vi

visual editor の略。ヴィアイ(vee-eye)と発音する。

viコマンドの共通性質

  • 大文字と小文字が区別される(大文字のキー入力と小文字のキー入力が違う意味になり、Iとiとは別になる)。
  • タイプしたときに画面にでない(「エコー」されない)。
  • コマンドのあとに[Enter]はいらない

最下行コマンド

最初に各種記号を入力する。/、? 検索コマンドの始まり

exコマンド

ラインエディタexで使われるコマンド。先頭に必ずコロン(:)をつける。

ファイルのオープンとクローズ

viは編集するファイルをバッファにコピーする。
ユーザが作業する相手はつねにバッファ中のファイルのコピーなので、バッファをセーブするまでは編集作業が元のファイルに反映されない。

ファイルオープン
$ vi [filename]
ファイルクローズ

編集内容をセーブして終了

(コマンドモードで)ZZ(大文字)

または

(exコマンドで):wq

wは書き込み、qは終了。

編集内容を破棄

編集内容を破棄して編集前の状態に戻す

:e!

編集内容を破棄して終了

:q!

カーソルの動かし方

h
左に1文字分
j
下に1文字分
k
上に1文字分
l
右に1文字分
0
行頭にジャンプ
$
行末にジャンプ
w
単語単位に前方にジャンプ(記号や句読点も1語)
W
単語単位に前方にジャンプ(記号や句読点を無視)
b
単語単位に後方にジャンプ(記号や句読点も1語)
B
単語単位に後方にジャンプ(記号や句読点を無視)

編集

i
挿入 入力モード移行時、カーソルは動かない
a
追加 入力モード移行時、カーソルが1文字右に動く
c
変更
    • cw 単語の末尾まで
    • c2b 2語前まで
    • c$ 行末まで
    • c0 行頭まで
    • cc 行単位での書き換え
d
削除。変更コマンド同様、削除するテキストオブジェクトの指定が必要。
r
文字単位での変更。1文字を別の1文字に変更する。編集してからコマンドモードに戻るのに[esc]はいらない。
x
文字単位の削除
.
直前のコマンドの繰り返し
u
最後のコマンドを取り消せる
~
大文字、小文字の変換

テキスト入力の方法

どのコマンドを実行した場合でも、入力モードに移行する。テキストを挿入し終わったら、[Esc]を押してコマンドモードに戻るのを忘れないように。

A(append)
カレント行の末尾にテキストを追加
I(insert)
行の先頭にテキストを挿入
o(open)
カーソル位置の下にテキストを挿入できる空行をオープン(カレント行の1行下に行を新規挿入して行の先頭にカーソルがくる)
O
カーソル位置の上にテキストを挿入できる空行をオープン(カレント行の1行上に行を新規挿入して行の先頭にカーソルがくる)
s(substitute)
カーソル位置の文字を削除してテキストを置換
S
行を削除してテキストを置換
R(replace)
現在の文字を新しい文字で上書き
入力コマンドへの数値引数の指定

oとO以外のコマンドは、前に数値を指定できる。
たとえば1行に下線をずらずら並べたり、文字を交互に繰り返したいときにはi、I、a、Aといったコマンドの前に数字をつけると大変便利。
50個の*

50i*[Esc]
**************************************************

=と-が交互に25個ずつ50文字

25a=-[Esc]
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

どちらも[Esc]キーを押すと実行される。

行の連結
J
2つの行を1行にまとめる(Jを入力した行の次の行が、Jを入力した行の最後に連結される。カーソルはJを入力したときの行末)

viの一般形式

(command) (number) (text object)
(number) (command) (text object)

(command) (number) は省略可能

画面単位でのスクロール

画面のスクロール
control + f
1画面分順方向にスクロール
control + b
1画面分逆方向にスクロール
control + d
1/2画面分順方向にスクロール
control + u
1/2画面分逆方向にスクロール
zによるスクロール

カーソルを元の行に残しつつ画面を上下にスクロールしたいとき

z[Enter]
カレント行が画面の一番上に表示されるようにスクロール
z.
カレント行が画面の中央に表示されるようにスクロール
z-
カレント行が画面の一番下に表示されるようにスクロール

数値引数を行番号として解釈し、それをカレント行として利用する。
例) 200行目を画面の先頭にする。

200z[Enter]
画面のリフレッシュ

control + l

画面内でのジャンプ
H
ホーム行(画面の一番上の行)にジャンプ
M
画面の中央の行にジャンプ
L
画面の最下行にジャンプ
nH
上からn行目にジャンプ
hL
下からn行目にジャンプ
行単位でのジャンプ
[Enter]
次の行の1文字目にジャンプ
+
次の行の1文字目にジャンプ
-
前の行の1文字目にジャンプ

最初の文字(空白やタブは無視される)まで移動する。

カレント行内でのジャンプ
^
カレント行の空白以外の1文字目に移動
n|
カレント行のn桁目に移動

テキストブロック単位でのジャンプ

テキストブロック単語、文、段落、セクション)単位でのジャンプ

e
単語の末尾にジャンプ
E
単語の末尾にジャンプ(句読点も単語の一部とみなす)
(
現在の文の先頭にジャンプ
)
次の文の先頭にジャンプ
{
現在の段落の先頭にジャンプ
}
次の段落の先頭にジャンプ

[[
 現在のセクションの先頭にジャンプ
]]
 次のセクションの先頭にジャンプ

検索によるジャンプ

/pattern

マッチするものが見つからない場合は"Pattern not found"というメッセージがステータス行に表示される。

検索の繰り返し
n
前回と同じ方向で検索を繰り返す
N
前回と反対の方向で検索を繰り返す
/[Enter]
順方向に検索を繰り返す
?[Enter]
逆方向に検索を繰り返す

行番号によるジャンプ

起動オプション

読み出し専用モード
$ vi -R file

または

$ view file

バッファ

  • 最後の9回分の削除内容を番号付きのバッファに保存している。
  • コピーした内容はa〜zまでの26個の文字名によってバッファに保存できる。

例) バッファ2に入っている2番目に新しい削除内容を復元

"2p

例) カレント行をバッファdにヤンク

"dyy