Qiitaにログインして、便利な機能を使ってみませんか?

1
4

記事を削除する

一度削除した記事は復旧できません。

この記事の編集中の下書きも削除されます。

削除してよろしいですか?

この記事は最終更新日から3年以上が経過しています。

Vimの複雑なコマンドを理解する

1
投稿日

対象者

Vim覚えたての人〜中級者
ci'とかyapなどのコマンドを見ても何してるかピンと来ない人

前置き

h j k lでのカーソル移動、モードの行き来、保存したりアンドゥ・リドゥしたりといった簡単なVimコマンドは使えるようになったが、コマンドを駆使してもっと効率的に作業したい!という方のためにVim初心者である私が覚えていった効率的にコーディングするテクニック・考え方を自分のメモ代わりに紹介します

これを読む頃にはci'とかyapとかgUapを理解できることを目指します

Vimコマンドの覚え方

Vimのコマンドってなんだか覚えづらい!そう思っている方多そうですよね
かくいう私もそうでした
でも英語の文法とかと一緒でちゃんと意味づけて覚えると覚えやすいですよ

どういうコマンドがわかりづらい?

ci'yapなんてコマンド、見た事あるけどよくは知らないor機械的に覚えてるだけって人が多いんじゃないでしょうか
これらのVimコマンドを理解するためには下記を理解するとよりわかりやすくなります

コマンドの仕組み

コマンドを分解するとオペレータというものとモーションというものに分けられます

オペレータ(operator)

  • 命令するためのコマンド
  • dコマンドは削除、yコマンドはヤンク(コピー)、guコマンドは小文字にする、等

これは最低限の操作として知ってると思います
これらのコマンドを知らないとVim操作自体が出来ないですしね
このオペレータってのはいわゆる動詞です
動詞だけだと何するかはわかるけど、どこまで操作するかといった情報がありません

下記に書いたモーションを組み合わせることによって本領を発揮します
これを知ると控えめに言って世界が変わります

モーション(motion)

  • 適用範囲を指定するコマンド
  • awa word(単語)、apa paragraph(段落)、i'はinnter' (シングルクォーテーション内)等

私はこれを知った時衝撃が走りました
今までエディタで
「Shiftキー押しながらカーソルキーでカーソルを移動して範囲を選択」
なんてやっていた事がまさかのキー2個で出来てしまうなんて!w

以下にコマンドを理解するために覚えるべきたった2つのルールを書きます
これだけ覚えれば冒頭のコマンドは理解できるようになるはずです

コマンドのルール

ルール1: コマンドはオペレータ+モーションで構成される

ほとんどのオペレータコマンドは実はそれ単体で入力するだけでは何も起きません

オペレータコマンドを入力するとオペレータ待機モードというものになり、次の入力を求める状態になるのです
ここでさきほど覚えたモーションを入力することによって範囲を指定できるのです

例えばオペレータdとモーションawを組み合わせて
daw
と続けて入力するとカーソル下の単語の削除のコマンドとなります
(さきほどの覚え方で考えるとdelete a wordですね)

ルール2: 連続したオペレータの範囲は現在行に適用される

先ほど説明したオペレータ待機モード時に
モーションではなく同じオペレータを入力すると現在行にモーションが適用されます

例えばオペレータdを入力して
dd
とするとカーソル行の削除のコマンドになります

これは無意識にそういうものだとして覚えている人も多いのではないでしょうか?
ただちゃんと仕組みとしてわかると理解が進みますよね

現在行をコピーしたいならyyか🤔など覚えやすいですね!

例外として、gUコマンドみたいに2文字以上のオペレータならgUUとなります

この2つのルールさえ把握していればVimのコマンドもほとんど理解できたも同然です

ちゃんと理解していると新しいオペレータやモーションを覚えた時にいくらでも応用が効くので楽ですね

終わりに

私はVimコマンドを覚えることは英語などの言語学習に似ていると思います
dawなどのボキャブラリーを覚えることによってそれを組み合わせて会話形式に命令を出せる
より楽に入力したい!と思うのならVimのボキャブラリーを増やせばいいだけですね😄

公式Docにすべてのオペレータとモーションが載っているのでふと眺めると新たな気づきが得られて面白いです
Vim documentation: motion

番外編

各コマンドの役割覚え方を掘り下げていきます
覚える手助けになれば幸いです

オペレータコマンドの覚え方

cコマンド

changeの略
選択文字を削除後に挿入モードへ移行
iで挿入モードに入ってバックスペースで削除して〜なんてやってる人はすぐにこれを使ってください
cコマンドだけで両方できます

dコマンド

deleteの略
文字入力する必要がなく削除する場合はこちら
レジストリにヤンクされるので順番入れ替えたり、いわゆるカット&ペーストにも使えます

yコマンド

yankの略(ヤンクとはコピーのこと)
コピーするだけの時はこちら

gU 大文字化

gu 小文字化

g~ 大文字小文字をトグル

uppercaseの略(たぶんw。小文字のuはその逆ってことで)
選択文字の大文字小文字を変更します
個人的にはあまり使わない

>コマンド

選択行のインデントを深くする
矢印的な覚え方でOK 「→」

<コマンド

選択行のインデントを浅くする
矢印的な覚え方でOK 「←」

以下、徐々に追記予定

参考

実践Vim 思考のスピードで編集しよう! (アスキー書籍)
超絶良書です。2回読んだけど読めば読むだけ新たな気づきがあります
この記事を読んでVimに目覚めたら是非読んでほしい本です!

1
4
0

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
  3. ダークテーマを利用できます
ログインすると使える機能について

コメント

この記事にコメントはありません。

いいね以上の気持ちはコメントで

1
4

記事を削除する

一度削除した記事は復旧できません。

この記事の編集中の下書きも削除されます。

削除してよろしいですか?

ログインして続ける

ソーシャルアカウントでログイン・新規登録

メールアドレスでログイン・新規登録