【Vim/Perl】 定義済みサブルーチンの一覧をQuickFixリストへ表示する
投稿日: / 更新日:
この記事は2年以上前に書かれたものです。情報が古い可能性があります。
Vimで比較的大きめなPerlのモジュールを編集する際、定義済みのサブルーチン一覧を表示したり、他のサブルーチンの定義箇所に瞬時にジャンプして内容を確認したくなる、ということが非常に良くあります。
Vimでこれを実現するためには、.vimrc
に以下の記述を追加します。
1 2 |
nnoremap ,su :sil exe 'cex "" \| windo \| try \| vimgrepa /\v^ *sub \w/j % \| cat \| endt \| cw':set cursorline nnoremap ,cl :cclose |
これは、VimのQuickFixという機能を利用しています。元々は、Cプログラムのコンパイルエラーを一覧表示して、エラー箇所へ簡単にジャンプするための機能ですが、これとvimgrep
の機能を併用し、サブルーチンの定義箇所と思しき行(/^ *sub \w/
にマッチする行)を抽出してQuickFixリストへ表示するものです(ちなみに、パターン開始直後の\v
は、パターンマッチングの作法をvery magicにして、できるだけPerlに近いパターンを書けるようにするためのものです)。
なお上記では、サブルーチン一覧をQuickFixリストに表示する処理、及びQuickFixリストを閉じる処理に、それぞれ,su
、,cl
というキーマップを定義しています。また、,su
でサブルーチン一覧を表示した後、QuickFixリスト上のどのサブルーチンへジャンプしようとしているかを分かりやすくするため、リスト内でカーソル行のハイライトを有効にしています。
実際に使用したイメージは、以下になります。
本当は、QuickFixリスト上でEnterを押してサブルーチンへジャンプした後、自動的にQuickFixリストを閉じるようにしたかったのですが、今のところその方法が分かりません。。。
なお、/\v^ *sub \w/
のところを/\v^ *def \w/
に変更すれば、PythonやRubyでも恐らく同様のことができるはずです(同様に、/\v^ *function \w/
にすればJavaScriptでも使えると思います)。ちなみに当然のことながら、無名サブルーチンや無名関数をリストアップすることはできません。
以上、簡単ですがVimのお役立ち情報をご紹介しました。