変数の宣言位置へジャンプする(gd/gD)
LSPを設定していない環境で、変数がどこで宣言されているか確認したくなることがあります。LSPの「定義へ移動」ほど賢くはありませんが、Vim標準にも似たようなコマンドが用意されています。
| キー | これだけ覚える |
|---|---|
| gd | ローカル宣言を検索 |
| gD | グローバル宣言を検索 |
| Ctrl-o | ジャンプ前の位置に戻る |
ローカル宣言を探す:gd
gd
カーソル下の単語について、次の順序で宣言らしき箇所を検索します。
1. 今いる関数の開始行から検索
2. ファイルの1行目から検索
3. カーソル行から空行を後方検索
function calc() {
let total = 0;
return total + 1;
}
function calc() {
let total = 0;
return total + 1;
}
使用箇所にカーソルを置いてgdを実行すると、同じ関数内の宣言行にカーソルが移動します。厳密な構文解析をしているわけではなく、あくまで単語検索の延長にすぎません。そのため、スコープを正しく理解しているわけではなく、同じ名前のグローバル変数にヒットしてしまうこともあります。プログラミング言語やコードの書き方によって精度は変わります。
グローバル宣言を探す:gD
gD
ファイルの先頭から検索し、主にソースコードの上方で宣言されるグローバル変数を探すためのコマンドです。gdがローカルスコープを優先するのに対し、gDは最初から全体を対象にします。
ハイライトと組み合わせて確認する
gdで宣言箇所へ移動すると、同時にその変数名がハイライトされます(hlsearchが有効な場合)。宣言位置にたどり着いたあと、そのままハイライトされた箇所を目で追えば、他にどこでその変数が使われているかもざっと把握できます。宣言ジャンプと使用箇所の確認を1つの操作でまとめて済ませられるのは地味ですが便利な点です。
LSPとの使い分け
LSPが有効な環境では、定義ジャンプの精度は圧倒的にLSP側が優れています。それでもgd/gDを知っておく価値があるのは、標準機能だけでも最低限の宣言ジャンプができるからです。
| 場面 | 使うべき手段 |
|---|---|
| LSPが有効 | LSPの定義ジャンプ(精度が高い) |
| LSP未設定・未対応の言語 | gd / gD(標準機能だけで完結) |
普段はLSPに任せつつ、いざというときの保険として覚えておくと安心です。
LSPが設定されていない古いシェルスクリプトのプロジェクトで、変数の出どころを探すのにgdを使ってみたら、思ったより正確に該当箇所へ飛んでくれて助かったことがあります。普段LSPに頼りきっていると存在を忘れがちですが、いざというときに標準機能だけで完結できる安心感は大きいです。
元の位置に戻る
gdで宣言箇所に飛んだあと、元の場所に戻りたければCtrl-oを使います。これはジャンプ履歴をたどる汎用的なコマンドで、gdによる移動もこの履歴に記録されます。定義を確認したらすぐ元の作業に戻る、という一連の流れがスムーズになります。何度も往復するときはCtrl-iで新しい位置へ戻ることもできるので、ブラウザの戻る進むのような感覚で使いこなせるようになります。
まとめ
gd/gDはLSPの代わりにはなりませんが、標準機能だけで最低限の定義ジャンプができる貴重な手段です。LSPが使えない場面での保険として頭の片隅に置いておくと安心です。