Vimのコマンドラインウインドウの使い方(q: / q/)
長いExコマンドを打ち間違えて最初からやり直した経験は誰にでもあるはずです。コマンドラインウインドウを使えば、過去に実行したコマンドや検索を「ノーマルモードの操作感」で編集して再実行できます。
目次(6項目)
| キー | これだけ覚える |
|---|---|
| q: | Exコマンドの履歴を編集 |
| q/ / q? | 検索履歴を編集 |
| Ctrl-f | コマンドライン入力中に履歴ウインドウを開く |
| Enter | カーソル行のコマンドを実行して閉じる |
開き方
q:
または、コマンドラインに入った状態でCtrl-fを押す方法もあります。入力中の長いコマンドにタイプミスを見つけたときに使うと効果的です。
:%s/gerp/grep/g
:%s/foo/bar/g
:g/TODO/d
:%s/gerp/grep/g
1行だった入力欄が、過去の履歴を含む複数行のバッファに変わります。カーソルは入力していた行の末尾に残るので、そこからbやhで打ち間違えた箇所まで戻って直接修正できます。バックスペースで消して打ち直す必要がありません。
種類によって開くウインドウの履歴が変わります。
- q::Exコマンドの履歴
- q/またはq?:検索履歴
- q=:計算式(レジスタでの式評価)の履歴
何が表示され、何ができるのか
コマンドラインウインドウには過去のコマンド・検索の履歴が一覧表示され、次の操作ができます。
- hjklやモーションでの移動
- i/a/o/Oでインサートモードに入り、内容を編集
- /や?で、実行したコマンド自体を検索
- 目的の行でEnterを押して、その行の内容を実行
:qまたは:quitでウインドウを終了
普通のコマンドラインは1行の入力欄にすぎませんが、コマンドラインウインドウはバッファとして扱われるため、複数行にまたがる編集や、ヤンク・削除といった通常の編集コマンドがそのまま使えます。ヤンクしたコマンドを他のバッファに貼り付ければ、設定ファイルへそのまま転記することもできます。
ウインドウの高さを指定して開く
デフォルトの高さで足りない場合は、数値を前置して開く高さを指定できます。
10q:
履歴の件数が多いプロジェクトでは、あらかじめ広めの高さで開いておくと一覧性が上がって探しやすくなります。開いた後にCtrl-w +で高さを後から調整することもできます。
活用場面
特に効果を発揮するのは次のような場面です。
- かなり前に実行した長いコマンドを検索して再実行します
- 打ち間違えたコマンドを、部分的に修正してから再実行します
- 複数のコマンドをつなげて編集してから、まとめて実行します
- 過去に試した
:setの値をヤンクして、設定ファイルに貼り付けます
ありがちな事故
コマンドラインウインドウを終了しようとして:qと打つつもりが、間違えて別の行にカーソルがある状態でEnterを押してしまい、意図しないコマンドが実行される、という事故が起きがちです。行を移動した直後は、実行前に何にカーソルがあるか確認する癖をつけておくと安心です。心配な場合はCtrl-cやEscで一旦キャンセルしてから:qと入力し直す方が安全です。
複雑な:%s置換コマンドを何度も微調整しながら試すとき、コマンドラインウインドウを開いて履歴から呼び出し、一部だけ書き換えて再実行する使い方が定着しています。1行入力の矢印キーで履歴をたどるより、バッファとして編集できるほうが複雑な修正には向いていると感じます。
まとめ
コマンドラインウインドウはq:/q/で開ける、履歴をバッファとして編集・再実行できる機能です。長いコマンドの微調整や検索パターンの修正が頻繁にあるなら、覚えておく価値があります。