はじめに
試した環境については下記。
- OS
macOS High Sierra(10.13.2) - GNU Emacs
25.3.1 - emacsのjediパッケージ
0.2.7 - python
2.7.12, 3.6.2
jediはEmacsでPythonのコーディングを行うときにコード補完や定義への移動、ヘルプの表示など可能にするパッケージ。
(ジェダイという名前が気に入っています)
ただ、公式サイトのQuick Startのとおりにやっても、なぜかM-x jedi:install-server
のところでエラーが出てしまったので、下記のサイトを見ながらpipで直接jediとepcをインストールしました。
http://d.hatena.ne.jp/n-channel/20131220/1387551080
pipでインストールしたjediとepcのバージョンは下記です。
- jedi
0.11.1 - epc
0.0.5
このjediですが、extensionで下記のようなコードビューワーがあり、これがjedi-direxになります。
jedi-direxのインストール
実際にjedi-direxをインストールして使ってみました。
まず、package-installを使ってインストール。
M-x package-install RET jedi-direx RET
インストールされたバージョンは20140310.236
でした。
そして下記を.emacsに追加してpythonファイルをpython-modeで開いてみました。
(setq jedi:complete-on-dot t)
(define-key python-mode-map "\C-cx" 'jedi-direx:pop-to-buffer)
(define-key python-mode-map "\C-c\C-x" 'jedi-direx:switch-to-buffer)
(add-hook 'jedi-mode-hook 'jedi-direx:setup)
しかし、ここで下記のエラーが発生。
deferred error : (error "\"AttributeError(\\\"module 'jedi.api' has no attribute 'defined_names'\\\",)\"")
どうやらjediをM-x jedi:install-server RET
ではなくpipで直接インストールしたためバージョンが合っていないようです。
このdefined_namesは既にjediの0.11.0からドロップされていました。
https://github.com/tkf/emacs-jedi/issues/293
そのため0.10.2をインストール。
$ pip uninstall jedi -y
Uninstalling jedi-0.11.1:
Successfully uninstalled jedi-0.11.1
$ pip install jedi==0.10.2
Collecting jedi==0.10.2
Using cached jedi-0.10.2-py2.py3-none-any.whl
Installing collected packages: jedi
Successfully installed jedi-0.10.2
Emacsを再起動して、もう一度試すとエラーは出ず、C-cxで無事jedi-direxのビューワーが表示されました。
TABキーでツリーが展開され、oキーを押すとそのラインに飛べます。
使いやすそうなので使っていきたいと思います。

2018/1/8追記
M-x jedi:install-server
が失敗した理由は単にvirtualenvが入っていないためでした。
pip install virtualenv
公式ドキュメントにも記載有り。
手動で入れたパッケージをアンインストールした後、
pip uninstall jedi epc
M-x jedi:install-server
を入力することで無事インストールできました。
ちなみにインストールされたPythonのパッケージの場所は下記の中でした。
.emacs.d/.python-environments
ただし、この方法でインストールしても結局Emacsのjedi-coreパッケージ内のjediepcserver.pyが対応していないので下記のエラーは発生します。
deferred error : (error "\"AttributeError(\\\"module 'jedi.api' has no attribute 'defined_names'\\\",)\"")
この件については既に修正のプルリクが出ていました。