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で決定します。

20160718173803.png
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 までメールしてください。

[応援お願いします]


このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

タグ

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このページの先頭へ