以下の内容はhttps://smooth-pudding.hatenablog.com/entry/2025/07/26/214916より取得しました。


Vim の基本のコマンドを自分なりに整理してみた

何度目かの Vim コマンドの勉強を始めました。今回はその勉強の一環として、基本的なコマンドを自分なりにまとめてみたいと思います。

Vim コマンド学習アプリ

Google Play で偶然見つけたこのアプリでコマンドを勉強しています。一問一答形式でサクサク問題を出してくれるので、かなり効率的に覚えられている気がします。
play.google.com

iOS 版もありそうな雰囲気です。
apptopia.com

現時点で、このアプリの EASY と NORMAL を一通りやったので、この範囲の知識+少しググって出てくるぐらいの範囲から、まとめやすいものをピックアップして整理したいと思います。

Vim の起動と終了

Vim がインストール済みなら、端末で「vim」と実行すると起動します。ファイル「vim some_file.txt」のように、特定のファイルを開くこともできます。

開いたタイミングではノーマルモード (後述) になっていて、以下のコマンドが使えるようになっています。コマンドを入力して Enter を押すと実行されます。

コマンド 内容 覚え方
:q 終了 (未保存の変更がない場合) quit
:q! 変更を破棄して終了 quit 強制
:w 変更を上書き保存 write
:wq 変更を保存して終了 write quit

保存については、コマンドのうしろにファイルパスを指定することで、名前を付けて保存することができます。:w filepath の場合は既にファイルがある場合はエラー、:w! filepath の場合は既存のファイルを上書きします。(:wq, :wq! も同様)

モード

Vim には 7 つの基本モードがあるようです*1。そのうち以下の 4 つが特に基本的なモードのようです。

  • ノーマルモード
    キー入力に割り当てられた種々のコマンドが使えるモード
  • 挿入モード
    文字を入力するモード (通常のメモ帳に近い)
  • ビジュアルモード
    範囲選択など
  • コマンドラインモード
    ノーマルモードの範囲を超えるコマンドが使えるモード

ノーマルモードでカーソルの移動などをしながら、入力モードで文字を入力していくようなスタイルが基本になりそうです。保存するときはコマンドラインモード、高度な選択をするときはビジュアルモードの出番です。

また、挿入モードの変種として置換モードがあります。挿入モードではカーソルの位置に文字が挿入されるのに対し、置換モードではカーソルの位置の文字を上書きしていく挙動になります。

モードを遷移するコマンドのうち、とりあえず覚えておけばよさそうなものを図にしました。

モードの変更

ノーマルモードへの遷移

いずれのモードからも Esc または Ctrl+c で戻ることができます。

挿入モード・置換モードへの遷移

挿入モードへの遷移は、モード切り替え時のカーソルの位置によってコマンドが違います。カーソルの位置はそれぞれ以下の表のとおりです。

i と I a と A
小文字 i = 現在の文字の直前 a = 現在の文字の直後
大文字 I = 行頭 A = 行末
挿入モードへの遷移コマンド

以下のように考えれば覚えやすそうです。

  • i/I は手前、a/A は後ろ (insert と append?)
  • 小文字は文字単位、大文字は行単位

また R で置換モードに入ります。こちらはカーソルの移動はありません。

コマンドラインモードへの遷移

: と ? と / があります。それぞれ以下の内容です。

: 汎用コマンド
/ 後ろを検索
? 手前を検索

? は Shift + / で入力できるので、いわば / の変化球という感じです。

/ の使い方は、「/(keyword)」という形式です。例えば「/abc」とすれば、カーソルより後ろの範囲の一番近いところにジャンプしてくれます。? は検索の向きが逆になるだけです。

: は多岐に渡るので、適宜紹介します。

各種コマンド

以下はいずれもノーマルモードで実行するコマンドです。

カーソルの移動

上下左右の移動は、矢印キーではなく h j k l キーを使います。ホームポジションに手を置いたときに、右手のほぼ定位置にあります。

上下左右の移動のキー

単語単位の移動は w b e があります。

コマンド 内容 覚え方
w 次の単語の先頭 word
b 現在の単語の先頭
すでに先頭なら前の単語の先頭
begin
e 現在の単語の末尾
すでに末尾なら次の単語の末尾
end
w b e の移動先

それぞれ小文字は「記号区切り」大文字は「空白区切り」になります。英字の間にハイフンやコンマなどの記号が挟まっている場合に挙動が変わります。例えば w と W の場合、下図のように、小文字のほうが記号の分だけ小刻みに進むことになります。「小文字は各駅停車、大文字は準急」というイメージで覚えればよさそうです。

wとWの違い

行頭および行末への移動はそれぞれ 0 と $ です。取っ掛かりがないので覚え方は謎です*2

直前の行の先頭への移動は -、直後の行の先頭への移動は + または Enter です。

0 $ - + の移動先

よりダイナミックに移動するコマンドもあります。

コマンド 内容 覚え方
H ウィンドウの一番上の行に移動 High
M ウィンドウの中央の行に移動 Middle
L ウィンドウの一番下の行に移動 Low
gg ファイルの先頭の行に移動 global?
G ファイルの末尾の行に移動 global?
(数字)G (数字)行目に移動 global?
H M L gg G の移動先

なお (数字)G の変わりに :(数字) としても同じ挙動みたいです。

検索

既に説明した / ? のコマンド以外に、以下の検索コマンドがあります。○には任意の一文字が入ります。

コマンド 内容 覚え方
f○ 後ろ側で最初に一致する1文字 find
F○ 手前側で最初に一致する1文字 find
* カーソルの後側で、カーソルの位置にある
単語と完全一致
???

文書変更

一文字の削除は x と s があります。x = Delete, X = BackSpace です。バツ印で覚えられそうです。また s は xi と同等、つまり Delete の直後に挿入モードに入ります。S はすこし挙動が異なり (なんでやねん)、後述する cc と同じ挙動になります。

より柔軟な削除処理には d○ を使います。d は delete の頭文字でしょう。基本的には○の部分で削除する範囲を指定します。○に入るものは以下の通りです。

  • 移動系コマンド1 (w, e, b, 0, $)
  • 移動系コマンド2 (H, M, L, gg, G, (数字)G, -, +, Enter)
  • 検索系コマンド (f○, /(kwd), ?(kwd), *)

移動系コマンド1と検索系コマンドについては、今のカーソル (の左側の縁) と移動先のカーソル (の左側の縁) の間の文字列を削除します。移動系コマンド2については、今のカーソルのある行から移動先までの行を削除します。

d を繰り返して dd と入力した場合は、今いる行全体を削除します。D は d$ と同じ挙動です。

またc○はd○の直後に挿入モードに入ります。○に入るものは d○ と同様で、cc は ddi と、C は Di と同じ挙動になります。

ちなみに、x と s および d と c は、キーボード上で隣同士になっています。キーの位置で覚えるのがよさそうです。

x と s、d と c はいずれも隣同士

文字の置き換えは r○ を使います。replace の頭文字でしょう。○には任意の一文字がはいります。カーソルのところの1文字を○に置き換えます。なお R は置換モードへの切り替えですが、r を複数文字にしたバージョンだと思えば自然に思えます。

o と O は、新たに空白行を挿入し、その行の先頭にカーソルがある状態で挿入モードに入ります。o はすぐ後に、O はすぐ前に挿入します。行と行の間に隙間を開くので open です。

文字列のコピーは「ヤンク (yank)」という名前がついていて、y○ 系コマンドを使います。d○と同様、○の部分に範囲を指定する文字を入れます。d○で削除される範囲が、代わりにコピーされると考えればOKです。ただし yy と Y はいずれも一行コピーです。

コピーしたものを貼り付けるには p または P を使います。paste の頭文字でしょう。p は直後に貼り付け、P は直前に貼り付けです。

ところで「カットは?」と思ったと思いますが、実は削除はカットを兼ねています。削除コマンドのあとに p を押すと、削除したものが貼り付けられます。ヤンクのあとにうっかり削除コマンドを使うと、上書きされてしまうので注意しましょう。

ファイル操作

Undo は u です。Redo は Ctrl+r です。そのまんまですね。

ファイルを開くには :e filepath を使います。e ってなんの頭文字でしょうね。「えいっ!」と開く感じですかね。

コマンド繰り返し命令

直前の移動系・検索系ではないコマンドを繰り返すには . を使います。例えば dd を3回繰り返したいときは、dddddd と打つ代わりに dd.. でOKです。また、. は移動系は無視するので、dd を実行したあと移動してから . を使うというやりかたもあります。

また「(数字)コマンド」とすることで、数字の回数だけ繰り返すようにできます。例えば dddddd は 3dd でも動きます。また 3j は3行下まで移動になります。(数字)G は例外です ((数字) 行目への移動)。

ちなみに 3dd. とした場合は、「3dd」というコマンドが繰り返されることになるので、6行削除になります。

f○ および F○ コマンドを繰り返すには ; を使います。検索方向が逆のものを使いたい場合は , を使います。

/(kwd) および ?(kwd) および * を繰り返すには n を使います。next の n でしょうか。検索方向を逆にするには N を使います。

範囲選択

より高度に範囲を選択して処理するには、ビジュアルモードを使います。ビジュアルモードに入るためのコマンドは v, V, Ctrl+v の三種類があります。visual の頭文字でしょう。

メモ帳などでは Shift を押しながら矢印キーを押すと範囲選択できますが、この Shift を押しっぱなしにしたような状態になるのが v コマンドです。移動コマンドで選択範囲を指定します。指定が終わったあと d または x を押すと削除、y を押すとヤンクされます。

V の場合は、行単位での範囲選択になります。Ctrl+v は矩形選択となります。その名の通り、長方形領域を選択することができます。

その他

コマンド 内容
~ 大文字/小文字を入れ替えて、カーソルを右に移動
Ctrl+a カーソルが数字上にあれば1増やす (add?)
Ctrl+x カーソルが数字上にあれば1減らす (extract?)
:set number 行番号を表示する
:set nonumber 行番号を非表示にする

おまけ

全削除は ggdG でできますね。

*1:詳しくは: intro - Vim日本語ドキュメント

*2:USキーでも別に対応してなさそうです。不思議。




以上の内容はhttps://smooth-pudding.hatenablog.com/entry/2025/07/26/214916より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14