はじめに
この記事は、vimを使い始めてノーマルモードとインサートモードの違いがわかった!ぐらいの初学者に向けて書いています。
特に、ノーマルモードの存在価値について疑問に思っている人のための記事とでも言っておきましょう。
前置き
ノーマルモード内のvimのコマンドは単語が一文字に圧縮された文章です。
例えば、dw
これはdelete word
です。
このように、動詞+目的語で構成されているので、なにか実行したい作業があったら、それを頭の中で唱えると自ずと指が動くようになるのです。
たまに脳死状態のときはdwdwdwdwdwdw
みたいなことはしてしまいますが。
ちなみに、vimはマウスや矢印キーまでに手を伸ばしたくない究極に怠惰、もしくは一分一秒を無駄にしたくない効率優先至上主義の方たちのためのエディタです。
というわけで、段階的に覚えていきましょう!
レベル1
*例に出てくる|
はカーソル位置です。
動詞
d
: delete ノーマルモードのままで消す
c
: change 消したあとにインサートモードへと移行
y
: yank(copy) コピー
これらの動詞は重ねる(dd
やcc
)などすることで、行に対してそのアクションを行えます。
さらに大文字にすると(D
やC
)カーソルより右に対してその動作を行ってくれます。
Hello W|orld // D
Hello W| // Normal Mode
Hell| World // C
Hell| // Insert Mode
f
: find 次の文字を見つける
副詞
i
: inside
a
: all
名詞
このあたりはノーマルモードの時に単体で使うと移動手段となります。
w
: word
b
: back つまりwordの逆です。
e
: end
// 移動方法として
He|llo World // w
Hello |World
He|llo World // b
|Hello World
He|llo World // e
Hell|o World // e
Hello Worl|d
He|llo World // 2e
Hello Worl|d
移動方向 (ノーマルモードで矢印キーなんて使ってたらどやされますよ。)
ホームポジションから動かずとも移動するため。
h
: 左
j
: 下
k
: 上
l
: 右
移動場所の視覚化
gg
k
^ h|l $
j
G
【応用問題】任意の場所からファイルの中身全消しはどうやって行うでしょう?
答え: ggVGd
(visual modeのものが入ってましたすみません。ちなみに最後のdはyに変えるとコピーになります。
副詞 + 目的語のみで使える目的語
"
: "" -> 例) di"
で"hello| world"
+ di"
-> ""
[], {}, '', (), <>
などもすべて使えるのでありとあらゆる囲うものすべてと考えてよいです。
XML系(HTML, XML等)で作業中の人へ
<element>this will| be deleted</element>
+ dit
-> <element></element>
なんてこともできます。
ここのtはtagのtです。
"Foo B|ar" // di"
"" // Normal Mode
"Foo Ba|r" // ca"
| // Insert Mode
ノーマルモードからインサートモードへのスムーズな切り替え
i
: insert カーソルの左側からインサートモードへ入ります。
a
: append カーソルの右側からインサートモードへ入ります。
I
: 行の頭からインサートモードへ入ります。
A
: 行の末尾からインサートモードへ入ります。
o
: 改行してからインサートモードへ入ります。
O
: 上に改行してからインサートモードへ入ります。
文字にしてもちょっと覚えにくいので視覚的に覚えましょう
O
I i|a A
o
プラスアルファで余力のある方へ
s
: カーソルの下にある文字を消してインサートモードへ
S
: カーソルのある行を消してインサートモードへ (cc
と挙動は一緒?)
一旦終了(2020/12/16)
需要があれば、随時書き足していきます。