[Vim問題] 変数の宣言位置を検索する方法とは?

この記事は約9分で読めます。

この記事では、Vim / neovim でプラグインを使わずに「変数の宣言位置を検索する」ためのコマンドについて、ご紹介します。

[解答] gd / gD

Vimコマンド1. ローカル宣言を検索する

(ノーマルモード)
gd

関数などで宣言されるローカル宣言を検索します。

ローカル宣言を検索する
ローカル宣言を検索する

つまり、ローカル変数の上にカーソル場合は、その関数内の宣言位置に移動するわけです。といいつつ、実は次の順に単語を検索するだけです。

  • 関数の開始行から検索
  • ファイルの1行目から検索
  • カーソル行から空行を後方検索

そのため、実はグローバル変数がヒットしたりします。この辺りは、編集するソースコードのプログラミング言語によって良し悪しが異なるようです。

ちなみに、検索が始まると宣言箇所に移動しつつ、検索対象にする単語(変数)が全てハイライトされます。

Vimコマンド2. グローバル宣言を検索する

(ノーマルモード)
gD

だいたいソースコードの上方で宣言されるグローバル変数のグローバル宣言を検索します。

つまり、グローバル変数の上にカーソル場合は、その宣言位置に移動するわけです。といいつつ、こちらも実はファイルの1行目から検索の順に単語を検索するだけです。

そのため、実はローカル変数がヒットしたりします。この辺りは、編集するソースコードのプログラミング言語によって良し悪しが異なるようです。

こちらも検索が始まると宣言箇所に移動しつつ、検索対象にする単語(変数)が全てハイライトされます。

補足

この検索は、下記で紹介した単語検索に加えて、宣言箇所への移動が加わります。

[Vim問題] カーソル下にある単語を検索する方法とは?
Vim / neovim でプラグインを使わずに「カーソル下にある単語を検索する」ためのコマンドとは...

動作に相性があるため、必ずしも便利とは言えません。

また、さらに進んで 1gd1gD なんかもあったりしますが、もはや使いどころさえよくわかりません…

とはいえ、もし相性の良いプログラミング言語のソースリーディングする場合には、とても役立ちますよね。また、ライブコーディングなどで披露すると、「おっ!」となるかもしれません。

ぜひ覚えておきたいものです。

このVimコマンドの補足情報

  • 利用頻度3.0
  • 便利さ4.0
  • 覚え易さ3.0

関連するVimヘルプ

Vim のヘルプでは下記のように解説されています。

ます。

gd
gd                      ローカル宣言を検索します。カーソルがローカル変数の上に
                        ある場合、その変数の宣言にジャンプします。はじめに、
                        Vim は現在の関数の開始行を検索します (“[[” コマンドと
                        同じ)。見つからなかった場合は、ファイルの 1 行目に移動
                        します。見つかった場合は、その場所から空行を後方検索し
                        ます。そして、”*” コマンドで検索するのと同じように、
                        キーワードを検索します。このとき、コメントと判断した行
                        は無視します(‘comments’ オプション参照)。
                        Note: Vim は文法を実際にチェックしているわけではなく、
                        キーワードにマッチするものを検索しているだけですので、
                        これがうまく動作するとは限りません。インクルードされて
                        いるファイル内も検索したい場合は、include-search で
                        列挙されているコマンドを使ってください。
                        このコマンドを実行した後、コマンドnで次のマッチを前
                        方検索できます。

gD
gD                      グローバル宣言を検索します。ファイル内で定義されている
                        グローバル変数の上にカーソルがある場合、その宣言にジャ
                        ンプします。”gd” と同じですが、このコマンドは常に 1 行
                        目からキーワードを検索します。

1gd
1gd                     “gd” と同じですが、現在のカーソル位置より前の {} ブ
                        ロック内を無視します。

1gD
1gD                     “gD” と同じですが、現在のカーソル位置より前の {} ブ
                        ロック内を無視します。

こちらは、Vim上では下記のコマンドでヘルプを確認できます。

:help gd
:help gD
:help 1gd
:help 1gD

ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。

参考書籍

こちらの書籍が参考になります。


Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。


こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。

Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。

タイトルとURLをコピーしました