株式会社オートプロジェクト

【第三回Vim入門】オペレータとモーション

【第三回Vim入門】オペレータとモーション

今回は仕組みの話

第一回・第二回は、手を動かして覚える操作の話でしたが、今回はノーマルモードの命令がどう組み立てられているかを整理したいと思います。

dwcw といったコマンドを丸覚えするのではなく、それらを分解して読めるようになることがゴールです。

オペレータとモーション

ノーマルモードの編集コマンドの多くは、ざっくり次の二つに分けられます。

役割 呼び方 意味
何をするか  オペレータ  削除・変更・コピーなど
どこまでか モーション 単語・行・段落など

つまり 「オペレータ + モーション = ひとつの命令」 です。

ddelete=削除)と wword=単語)を続けると dw になります。「削除」+「次の単語のまとまりまで」という一つの命令です。キーが二つ並んでいるのは、たまたまではなく、この組み立て方の結果です。

同じ要領で cchange=変更)と w を組み合わせた cw は、「その単語を変える」命令です。d は消すだけ、c は消したあとインサートモードに入る、という違いだけ覚えておけば十分です。

d を押したあと、何が起きているか

d だけ押しても、すぐには何も消えません。Vim は次のキーを待っています。続けて w を押すと、範囲が決まって初めて削除が走ります。

だから同じ d に、あとから付けるモーションを変えるだけで、消す幅を変えられます。

入力 分解(略) 読み方
dw   delete + word 削除 + 次の単語のまとまりまで
d$ delete + 行末($)  削除 + 行末まで
dd delete + 行(d 削除 + 行全体

d のあとに Esc を押しても、範囲が決まっていなければ何も起きないことがあります。オペレータだけでは命令が完結していないからですね。

第二回の w は、実は同じ部品

第二回で紹介した wword)や bbackward)は、単体ではカーソルを動かすキーでした。これがモーションです。第一回の h j k l も同じく、移動の部品です(こちらはキー配列の位置を表す名前で、英単語の略ではありません)。

よく使うモーションの略は次のとおりです。

キー 意味
w word 次の単語のまとまりへ
b backward   前の単語のまとまりへ
$ (行末) 行の末尾へ

ここが少し面白いところで、w は文脈によって役割が変わります。

入力 分解(略) 何をするか
w word カーソルを進める(読むときの移動)
dw delete + word その手前までを削除する(進めるだけではない)

同じ w です。オペレータが前に付くかどうかで、「移動」か「どこまでか」の指定かが切り替わります。Vim のキーが少なく感じられるのは、この部品の使い回しがあるからです。

最低限覚えておけば良いオペレータ

キー 意味
d 削除
c 変更(削除してからインサートへ)
y コピー(yank)

どれも形は同じで、オペレータのあとにモーションを続けます。

オペレータ + モーション dwcwyw
数字 + オペレータ + モーション  3dw(3単語分)

3dw のように先頭に数字を付けると、量を指定できます。第二回の 43G と同じで、数字は「何回分・どこまで」の修飾に使われる、というイメージですね。

とにかく試してみよう

ここまでの内容で、コマンドは自分で組み立てられる、ということをご理解いただけたと思います。

オペレータとモーションを組み合わせて、他にはどんなことができるか試してみてください。コマンドを丸覚えするより、自分で考えて試したものは忘れにくいですし、手によく馴染んでくると思います。ここまでくると、Vimが楽しくなってきたのではないでしょうか。

次回以降では、Vimの強力な機能である、繰り返しや、neovimへの移行などを扱っていきます。

エンジニアのみなさまへ

株式会社オートプロジェクトでは、中小企業向けのシステム・アプリケーション開発 / 外注サービスを提供しております。

貴社のニーズに応じた柔軟なサポートを行いますので、ぜひお気軽にご相談ください。

中小企業向けシステム・アプリケーション開発 / 外注サービスについて、オートプロジェクトに問い合わせをする

Contact ご相談・お問い合わせ

実現の可否や概算費用、納期に関するご質問・ご相談も、
どうぞご遠慮なくお問い合わせください。

TOP