対象者
Vim覚えたての人〜中級者
ci'
とかyap
などのコマンドを見ても何してるかピンと来ない人
前置き
h
j
k
l
でのカーソル移動、モードの行き来、保存したりアンドゥ・リドゥしたりといった簡単なVimコマンドは使えるようになったが、コマンドを駆使してもっと効率的に作業したい!という方のためにVim初心者である私が覚えていった効率的にコーディングするテクニック・考え方を自分のメモ代わりに紹介します
これを読む頃にはci'
とかyap
とかgUap
を理解できることを目指します
Vimコマンドの覚え方
Vimのコマンドってなんだか覚えづらい!そう思っている方多そうですよね
かくいう私もそうでした
でも英語の文法とかと一緒でちゃんと意味づけて覚えると覚えやすいですよ
どういうコマンドがわかりづらい?
ci'
やyap
なんてコマンド、見た事あるけどよくは知らないor機械的に覚えてるだけって人が多いんじゃないでしょうか
これらのVimコマンドを理解するためには下記を理解するとよりわかりやすくなります
コマンドの仕組み
コマンドを分解するとオペレータというものとモーションというものに分けられます
オペレータ(operator)
- 命令するためのコマンド
-
d
コマンドは削除、y
コマンドはヤンク(コピー)、gu
コマンドは小文字にする、等
これは最低限の操作として知ってると思います
これらのコマンドを知らないとVim操作自体が出来ないですしね
このオペレータってのはいわゆる動詞です
動詞だけだと何するかはわかるけど、どこまで操作するかといった情報がありません
下記に書いたモーションを組み合わせることによって本領を発揮します
これを知ると控えめに言って世界が変わります
モーション(motion)
- 適用範囲を指定するコマンド
-
aw
はa word(単語)、ap
はa paragraph(段落)、i'
はinnter' (シングルクォーテーション内)等
私はこれを知った時衝撃が走りました
今までエディタで
「Shiftキー押しながらカーソルキーでカーソルを移動して範囲を選択」
なんてやっていた事がまさかのキー2個で出来てしまうなんて!w
以下にコマンドを理解するために覚えるべきたった2つのルールを書きます
これだけ覚えれば冒頭のコマンドは理解できるようになるはずです
コマンドのルール
ルール1: コマンドはオペレータ+モーションで構成される
ほとんどのオペレータコマンドは実はそれ単体で入力するだけでは何も起きません
オペレータコマンドを入力するとオペレータ待機モードというものになり、次の入力を求める状態になるのです
ここでさきほど覚えたモーションを入力することによって範囲を指定できるのです
例えばオペレータd
とモーションaw
を組み合わせて
daw
と続けて入力するとカーソル下の単語の削除のコマンドとなります
(さきほどの覚え方で考えるとdelete a wordですね)
ルール2: 連続したオペレータの範囲は現在行に適用される
先ほど説明したオペレータ待機モード時に
モーションではなく同じオペレータを入力すると現在行にモーションが適用されます
例えばオペレータd
を入力して
dd
とするとカーソル行の削除のコマンドになります
これは無意識にそういうものだとして覚えている人も多いのではないでしょうか?
ただちゃんと仕組みとしてわかると理解が進みますよね
現在行をコピーしたいならyy
か🤔など覚えやすいですね!
例外として、gU
コマンドみたいに2文字以上のオペレータならgUU
となります
この2つのルールさえ把握していればVimのコマンドもほとんど理解できたも同然です
ちゃんと理解していると新しいオペレータやモーションを覚えた時にいくらでも応用が効くので楽ですね
終わりに
私はVimコマンドを覚えることは英語などの言語学習に似ていると思います
d
やaw
などのボキャブラリーを覚えることによってそれを組み合わせて会話形式に命令を出せる
より楽に入力したい!と思うのならVimのボキャブラリーを増やせばいいだけですね😄
公式Docにすべてのオペレータとモーションが載っているのでふと眺めると新たな気づきが得られて面白いです
Vim documentation: motion
番外編
各コマンドの役割覚え方を掘り下げていきます
覚える手助けになれば幸いです
オペレータコマンドの覚え方
c
コマンド
changeの略
選択文字を削除後に挿入モードへ移行
i
で挿入モードに入ってバックスペースで削除して〜なんてやってる人はすぐにこれを使ってください
c
コマンドだけで両方できます
d
コマンド
deleteの略
文字入力する必要がなく削除する場合はこちら
レジストリにヤンクされるので順番入れ替えたり、いわゆるカット&ペーストにも使えます
y
コマンド
yankの略(ヤンクとはコピーのこと)
コピーするだけの時はこちら
gU 大文字化
gu 小文字化
g~ 大文字小文字をトグル
uppercaseの略(たぶんw。小文字のu
はその逆ってことで)
選択文字の大文字小文字を変更します
個人的にはあまり使わない
>
コマンド
選択行のインデントを深くする
矢印的な覚え方でOK 「→」
<
コマンド
選択行のインデントを浅くする
矢印的な覚え方でOK 「←」
以下、徐々に追記予定
参考
実践Vim 思考のスピードで編集しよう! (アスキー書籍)
超絶良書です。2回読んだけど読めば読むだけ新たな気づきがあります
この記事を読んでVimに目覚めたら是非読んでほしい本です!