【Vim】「思考のスピードで編集できる」コマンドの覚え方を現役エンジニアが徹底解説!

みなさんVim使ってますか?

今回は基本的なVim操作は(モード切り替え、移動方法とか)は分かったけど、コマンドとか複雑過ぎて覚えられない!

という初心者Vimmer向けに組み合わせコマンドの簡単な覚え方をVimmer歴1年半程の若輩者である自分が解説してみようと思います。

Vimに触れたことが無い人はもし良ければNeoVimのインストール方法とプラグイン管理を分かりやすくまとめた記事を書いているので是非見てみてください。

【Vim】今から始めるNeoVimのインストール方法とプラグイン管理のやり方!

yuto
yuto

今からインストールする人はVimの良さを継承しつつモダンな仕様に仕上げているNeoVimがおすすめ!

この記事ではまず最初にVimコマンドの基本構成覚え方をざっくり解説しつつ、その後に実際に使う頻度が高い便利コマンドを例にして更に深堀りして解説していきます。

この記事を読み終わった頃には単に暗記ではなく、自分の思い通りにコマンドを扱うことができるようになると思います。

Vimコマンドの基本

まずはじめにVimコマンドの基本から解説していきます。

この基本を頭に入れれば、もはや多くの複雑なコマンドも覚えられたも同然です。

コマンドはただ闇雲に暗記したがる人が多いですが、それはNGです。

コマンドには構成されている文字ごとにしっかり意味があり、それを理解すれば暗記なんてせずに、スラスラと思考のスピードで目的に応じたコマンドを叩けるようになります。

まずはコマンドを構成している「オペレータ」「モーション」「テキストオブジェクト」の3つの要素を順に説明していきます!

yuto
yuto

注意として、コマンドは今現在カーソルの上に置かれている場所に対して実行されます!

オペレータ

オペレータとは、削除や変更などのファイルの編集動作を指定するためのキー(枕詞)です。

動作毎に対応したキーが決められていて、よく使うオペレータは下記になります。

▼キー▼意味▼備考
d削除覚え方は「delete」
yヤンク(コピー)コピーと同じ意味
覚え方は「yank」
c変更削除してインサートモードに入る
覚え方は「change」
v選択覚え方は「visual」
r置換覚え方は「replace」
gu英字を小文字にする
gU英字を大文字にする

v」だけモードなので少し特殊ですが「選択」のオペレータとしても使用できます。

モーション

モーションとは、カーソルを任意の場所へ移動するためのキーです。

基本的にオペレータの「v」と組み合わせて使うことが多いと思います。

よく使うモーションは下記です。

▼キー▼意味▼備考
f「f」+ {文字}を叩くとカーソル行にある一番始めの{文字}まで移動覚え方は「find」
$カーソル行の最後尾まで移動
0カーソル行の先頭まで移動
^カーソル行の最初の単語の先頭に移動
ggファイルの先頭に移動「G」でも同じ動き
%「{」や「”」など、テキストを囲む記号の上で叩くとその反対の閉じ記号に移動する

テキストオブジェクト

テキストオブジェクトとは、テキストに対して何か動作を行う際にオペレータで指定した動作をどの範囲で実行するのかを指定するためのキーです。

このテキストオブジェクトも2つの要素を任意で組み合わせて構成されるので少し覚えるのが大変かもしれないですが、意味を理解すれば簡単です。

内部指定/外部指定

これはこの後説明する指定キーワードの内側を選択するのか、外部まで選択するのかを指定するキーです。

▼キー▼意味▼備考
i内側のカーソルの内側の要素を対象にする
覚え方は「inner」
a内側含め外側も内側も含めて、カーソル上にある要素も対象にする
覚え方は「a (英語で「ひとつの」の意味)」

指定キーワード

先程の「内部指定/外部指定」と組み合わせて特定のキーも一緒に指定します。

よく使うキーワードは下記です。

▼キー▼意味▼備考
wword覚え方は「word」
「”」で囲まれた文字列
(「(」で囲まれた文字列
{「{」で囲まれた文字列
tHTMLタグで囲まれた文字列覚え方は「tag」

コマンドの組み合わせ例

ここまで、ざっとコマンドのキーと意味についてまとめましたが、文字だけでは理解は難しいと思いますので実際に使う頻度の高いコマンドの構成と動きを見ながら更に詳しく解説していきます。

今回は下記の4つのコマンドを解説していきます。

  1. cat
  2. diw
  3. vi”
  4. v$

cat

例えば「cat」というコマンドを見てみます。

意味は「カーソル上にあるタグを削除(中身も)してインサートモードに入る」です。

猫ではないです。

構成は

  • 「変更」を意味する「c」(オペレータ)
  • 「内側含め外側のタグも」を意味する「at」(テキストオブジェクト)

になります。

実際に動きを見てみると、この様にtemplateタグ含め、ネストされていたdivタグも全て削除されてインサートモードに入りました。

テキストオブジェクトとして「a」を指定してあげると今現在のカーソル上にある要素も含めた動作が可能になります。

ちなみに「cit」とコマンドを叩くと、カーソルの下にあるtemplateタグは残りつつ、タグの中のdivタグのみを削除してインサートモードに入ります。

diw

次に「diw」というコマンドを見てみます。

意味は「カーソル上にある単語を削除する」です。

構成としては

  • 「削除」を意味する「d」(オペレータ)
  • 「内側の文字列」を意味する「iw」(テキストオブジェクト)

になってます。

ちなみに「i」を入れないで「dw」とすると今のカーソル位置から後ろのテキストが削除されるだけになります。

vi”

次に「vi”」というコマンドを見てみます。

意味は「カーソル上にある一番始めの「”」で囲われた文字を選択する」です。

構成は

  • 「選択」を意味する「v」(オペレータ)
  • 「内側の「」」を意味する「i”」(テキストオブジェクト)

になってます。

」は選択されずに中身の「setting」のみ選択された状態になりましたね。

ちなみに「va”」とすると、「」を含めた「“setting”」が選択された状態になります。

v$

最後に「v$」というコマンドを見てみます。

意味は「カーソル位置から行末尾まで選択する」ですね。

構成は

  • 「選択」を意味する「v」(オペレータ)
  • 「末尾まで」を意味する「$」(モーション)

になってます。

ここまでは「オペレータ」と「テキストオブジェクト」の組み合わせのコマンドを紹介しましたが、こんな感じで「オペレータ」と「モーション」のみの組み合わせも可能です。

おわりに

ざっとVimコマンドの構成と覚え方を書き殴って見ましたがどうでしたか?

コマンドの組み合わせには1つ1つにしっかり意味があって、目的の動作に合っている事が分かってもらえたと思います。

ここまでの事が頭に入れば、

「このオペレータとテキストオブジェクトを組み合わせればこの動きができるはず!」

「このモーションを使えば効率よくファイル内を移動できるんじゃね?」

とか考える事ができると思います。

その状態に到達できればVimの便利さを実感できる事間違いないです。

Vimコマンドの組み合わせは本当に数え切れない程あって、まだまだ全てを把握しているわけではない若輩者ながらできる限り分かりやすく書いたつもりです。

この記事でVimに苦手意識がある人の助けになれば嬉しいです。

Vimの事を体系的に勉強したい人はこちらの書籍がおすすめです。

おわり

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です