viにモードなんてない
viの初心者向け解説で、「入力モードとコマンドモードの二つがあり」
なんてのをよく見かける。でも、この説明が混乱の元だと個人的には思っている。
viはすべてがコマンドである。
hはカーソルを左に動かすコマンド、kは上に動かすコマンド、xは文字を削除するコマンド、iは文字を入力するコマンド、てな具合。だから、2kは2行上に移動するし、3xは3文字消えるし、4iは文字が4回入力される。試しに、
5oqwerty[ESC]
とやると
qwerty
qwerty
qwerty
qwerty
qwerty
となる。実に一貫性の取れた操作体系になっている。
「二つのモード」で混乱してたあなた、これでスッキリしたでしょ?
viはすべてコマンドだというのは、祖先がラインエディタだということを考えれば当たり前のこと。
ついでにいうと、viのコマンドの基本系は、
繰返し回数 動作
動作 範囲指定(カーソル移動)
で行なう。前者は上の例にも書いた3xといった記法。後者は、英語の動詞と目的語みたいなものか。例えば、
qwerty1asdfgh1zxcvbn
という行があり、カーソルがeにあったとしたとき、d3lとやれば、
qwy1asdfgh1zxcvbn
となる。念のため解説すると、
文字を消す。
その範囲は、カーソルの現在位置から3文字右まで。
ということである。同様に、d2f1とやれば、
qwzxcvbn
となる。こちらは、
文字を消す。
その範囲は、カーソルの現在位置から右側の2番目の1という文字まで。
という意味である。
どんどん応用できる。
d/b 現在位置から次の(行をまたぐ)bという文字まで消去。
y1G 現在位置から文頭までをyankバッファに入れる。
c^ 現在位置から行頭までを変更する(入力の終りはESC)。
てな具合。
viはすべてコマンドだということと、動作と範囲の組合せという概念さえ掴んでしまえは、こっちのもの。
ディスカッション
コメント一覧
まだ、コメントがありません