shtaxxx日記

コンピュータアーキテクチャについて研究している研究者の日記や技術紹介

emacsでPython+Jediの補完を使う

OSには事情によりCentOS 6.5を想定しているが,Ubuntu等でもほぼ同じ.

各種ソフトウェアインストール

pipをインストールし,その後virtualenvをインストールする.既にインストールされていればスキップ可能.

CentOS (6.5) の場合 (rootで実行)

yum install python27 python3
easy_install pip
easy_install-3.3 pip
pip install virtualenv
pip3 install virtualenv

次に,jediとepcをインストールする

pip3 install jedi epc

 

jediの設定をする

cd .emacs.d/site-lisp/jedi/emacs-jedi
virtualenv-3.4 env

emacs lispを設定する

inits/70-python.el はこんな感じ

;; python-mode with jedi
(add-to-list 'load-path "~/.emacs.d/site-lisp/jedi/emacs-deferred")
(add-to-list 'load-path "~/.emacs.d/site-lisp/jedi/emacs-epc")
(add-to-list 'load-path "~/.emacs.d/site-lisp/jedi/emacs-ctable")
(add-to-list 'load-path "~/.emacs.d/site-lisp/jedi/emacs-jedi")

(autoload 'python "python" nil t)
(autoload 'jedi "jedi" "Jedi for python" t)

(add-hook 'python-mode-hook
          '(lambda ()
             ;; python common 
             (setq python-python-command "python3")
             (setq indent-tabs-mode nil)
             (setq indent-level 4)
             (setq python-indent 4)
             (setq tab-width 4)
             ;; jedi
             (setq jedi:setup-keys t)
             (jedi:setup)
             (define-key jedi-mode-map (kbd "M-TAB") 'jedi:complete)
             (setq jedi:complete-on-dot t)
             (setq jedi:environment-root "env")
             (setq jedi:environment-virtualenv
                   (append python-environment-virtualenv
                           '("--python" "python3")))))

(eval-after-load "jedi"
  '(progn
     (setq jedi:server-command
           (list python-python-command jedi:server-script))))