Vimの標準入力補完(Ctrl-n / Ctrl-p / Ctrl-x)の使い方
LSP由来の高機能な補完プラグインを入れる前に知っておきたいのが、Vimには標準の補完機能が組み込まれているという事実です。長い変数名を最後まで打たなくても、途中まで入力してキーを押すだけで候補から選べます。
| キー | これだけ覚える |
|---|---|
| Ctrl-n / Ctrl-p | キーワード補完(次候補 / 前候補) |
| Ctrl-x Ctrl-l | 行全体を補完 |
| Ctrl-x Ctrl-f | ファイルパスを補完 |
| Ctrl-x Ctrl-o | オムニ補完(言語ごとの意味解析) |
| Ctrl-y / Ctrl-e | 候補を確定 / キャンセル |
基本のキーワード補完
インサートモードで単語の一部を入力してからCtrl-nを押すと、既存のテキストから一致する単語を検索して候補を挿入します。
function calculateTotal() {
}
calc│
function calculateTotal() {
}
calculateTotal
Ctrl-nとCtrl-pで検索方向(下から探すか上から探すか)が変わり、候補が複数あれば続けて押すことで次の候補に切り替えられます。
どこから候補を探しているか
特に設定していなければ、次の場所を順に検索して候補を探します。
- カレントファイル
- 他のウインドウで開いているファイル
- ロードされているバッファ(隠しバッファ含む)
- ロードされていないバッファ
- タグファイル
- カレントファイルが
#includeしているファイル
検索範囲は'complete'オプションで変更できます。デフォルトのままでも、同じプロジェクト内で使っている変数名やクラス名の補完には十分機能します。
Ctrl-xのサブモードで対象を絞り込む
Ctrl-xに続けて別のキーを押すと、補完対象を特定の種類に絞り込めます。
| キー | 補完対象 |
|---|---|
| Ctrl-x Ctrl-n | 現在のバッファ内のキーワードのみ |
| Ctrl-x Ctrl-l | 行全体(似た行を丸ごと補完) |
| Ctrl-x Ctrl-f | ファイルパス(詳細は別記事) |
| Ctrl-x Ctrl-o | オムニ補完(言語ごとの意味解析による補完) |
| Ctrl-x Ctrl-k | 辞書ファイルから補完 |
Ctrl-x Ctrl-lの行補完は意外と便利で、似たようなログ出力やコメント行を何度も書くときに、1行分丸ごと補完候補として出してくれます。
補完メニューの操作
補完候補が表示されている間は、Ctrl-n/Ctrl-pで候補間を移動し、Ctrl-yで確定、Ctrl-eでキャンセルして元の入力に戻せます。Enterでも確定できますが、改行を意図しているのか確定を意図しているのか紛らわしい場面があるため、確実に確定したいときはCtrl-yを使う癖をつけておくと事故が少なくなります。
標準補完とLSP補完の使い分け
プログラミング言語のAPI名や関数のシグネチャまで正確に補完したい場合は、LSPベースの補完プラグインのほうが精度が高いです。一方、設定ファイルやMarkdownのような、LSPが対象外のファイルでは標準のキーワード補完が今でも十分役に立ちます。両方を知っておいて、状況に応じて使い分けると実用的です。
LSP補完が使えないYAMLの設定値や、独自定義した長い変数名を書くときはCtrl-nだけで十分間に合っています。プラグインを何も入れていない環境でSSH越しに作業するときも、この標準補完があるおかげで長い識別子の打ち間違いを気にせず済みます。
まとめ
Vim標準の補完はCtrl-n/Ctrl-pだけで大半の場面をカバーできます。ファイルパスや行単位の補完が欲しいときはCtrl-xのサブモードを使い分けます。LSP補完が使えない場面でこそ真価を発揮します。