emacs dumb-jump.el : すぐ使える多言語対応関数・変数定義ジャンパー | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット
パッケージ名 | dumb-jump |
概要(原文) | jump to definition for multiple languages without configuration. |
リポジトリ | MELPA |
取得先 | https://github.com/jacktasia/dumb-jump |
バージョン | 20160715.1740 |
関連記事 | package:dumb-jump package:ag package:etags package:gtags package:robe package:elpy package:popup |
dumb-jump.elは複数のプログラミング言語に対応した
関数・変数定義にジャンプするパッケージです。
タグファイルなどは使わずag(the_silver_searcher)を使うのが特徴です。
タグファイルがあると確かに高速にジャンプできますが、
メンテナンスの手間がかかります。
最近のコンピュータは高性能なので小中規模のコードは
agによって腕づくで検索してしまった方が手軽です。
もっとも、大規模な開発においてはタグファイルがあれば高速です。
agがインストールされていない場合はgrepを使いますが、
速度面などの観点から是非ともagをインストールしておいた方がいいです。
このパッケージの特徴は、TAGSファイルなどを使わずに
カレントバッファのメジャーモードや拡張子に応じて
ag(grep)に渡す正規表現を決定し、定義と思われる場所にジャンプします。
もし、一箇所に決定できない場合はポップアップメニューで選択肢が出てきます。
動的言語によるDSLまでは対応していませんが、
普通の関数定義・変数定義にはジャンプできる程度の精度はあります。
たとえばelispでいえばdefine-minor-modeなどで定義された関数にはジャンプできません。
elispでは素直にファイルをロードして find-function などでジャンプする方が確実です。
dumb-jump インストール
このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。
M-x package-refresh-contents
M-x package-install dumb-jump
対応言語
- JavaScript
- Emacs Lisp
- Python
- Go
- PHP
- Ruby
- Scala
- Clojure
- Faust
- R
- Lua
- Rust
- CoffeeScript
使えるコマンド
マイナーモード M-x dumb-jump-mode を有効にしたら、()内のキーバインドが使えます。
- dumb-jump-go (C-M-g)
- 定義にジャンプする
- dumb-jump-back (C-M-p)
- ジャンプ前の場所に戻る
- dumb-jump-quick-look (C-M-q)
- 定義位置をエコーエリアに表示する
Rubyでの使用例
以下のRubyスクリプトを例にします。
class A def sub1 # (1) 1 end def sub2 # (2.2) 2 end end class B < A def sub2 # (2.1) 22 end def main sub1 # *1 sub2 # *2 end end
「*1」のsub1でC-M-gを押したら(1)の行にジャンプします。
「*2」のsub2でC-M-gを押したら(2.1)の行にジャンプし、再度実行したら(2.2)の行にジャンプします。
elispでの例
dumb-jump.elと同じディレクトリにelファイルを作成します。
(defun a () (interactive) (dumb-jump-mode) (dumb-jump-go))
dumb-jump-modeはdefine-minor-modeによる定義なのでジャンプできませんが、
dumb-jump-goはpopup.elによる選択肢が現れます。
C-p/C-nで選択してRETで決定します。
Fig1: 複数の候補が出てきたらpopupされる
.dumbjumpで検索先を増やす
プロジェクトルートディレクトリに .dumbjump ファイルを置いておくと、
定義の検索先を増やしたり減らしたりできます。
たとえば「+」に絶対パス(~は未対応)を指定すれば、使用ライブラリも定義検索の対象になります。
対して「-」を指定すれば検索対象外にできます。
.dumbjumpファイルなしでは「-filter」などの定義はジャンプできないですが、
作成することでジャンプできるようになります。
たとえばquelpa を使っていてf/s/dash/popupのライブラリが以下のディレクトリにある場合は.dumbjumpの内容を以下のようにします。
+/home/rubikitch/.emacs.d/quelpa/build/f/ +/home/rubikitch/.emacs.d/quelpa/build/s/ +/home/rubikitch/.emacs.d/quelpa/build/dash/ +/home/rubikitch/.emacs.d/quelpa/build/popup/
対応言語を増やすには
各プログラミング言語ごとの正規表現設定は dumb-jump-find-rules 変数に、
拡張子と言語名とagのファイルタイプは dumb-jump-language-file-exts に、
コンテキスト情報は dumb-jump-language-contexts に定義されています。
とくに dumb-jump-find-rules は複雑ですが、
なんとか読み解けば対応言語を増やせるでしょう。
なお、:regex内のJJJは現在のシンボル、「\\j」は単語の境界を表しています。
増やしたらpull-requestを送ってあげてください。
本サイトは、広大なるEmacs界の道具としてあなたの役に立ちたいという純粋な奉仕で運営しています。 掲載しているコードは複写・転載など自由に使っていただいて構いません。 改良・MELPAパッケージ化していただけると最高に嬉しいです。
手元で検索できるよう文書全体をGitHubに置いています。 辞書代わりにしていただければ幸いです。
$ git clone --depth=1 git://github.com/rubikitch/daily-emacs-jp.git
もし、うまく動作しないのならば pull-request / rubikitch __at__ ruby-lang __dot__ org までメールしてください。
タグ
2016/07/18 | コメント/トラックバック(0) | トラックバックURL |
カテゴリー:Emacs