Emacs で Python 開発環境を構築

    はじめに

    coursera で Python をつかう講座を 2 つとった.

    もちろん Emacs で開発環境をつくったので, 構築メモ.

    入力支援

    python.el は公式, python-mode.el は Python コミュニティによって作成されたもの.

    python

    Emacs にデフォルトではいっているやつ.

    インデント設定

    4 で設定.

    [sourcecode language=”emacs-lisp” title=”” ]
    (add-hook ‘python-mode-hook
    ‘(lambda ()
    (setq indent-tabs-mode nil)
    (setq indent-level 4)
    (setq python-indent 4)
    (setq tab-width 4)))
    [/sourcecode]

    コードリーディング

    helm-etags-plus

    ダグジャンプ. ctags を利用する. そして, ctags を Emacs から利用するために, 最近は helm-etags-plus なるものを使っていたりする.

    [sourcecode language=”emacs-lisp” title=”” ]
    (require ‘helm-etags+)
    [/sourcecode]

    [sourcecode language=”bash” title=”” ]
    $ ctags -o TAGS *.py
    [/sourcecode]

    swoop

    ctags はメソッドの定義にはジャンプできるけど, 変数の宣言にジャンプできない.

    変数の宣言に飛びたいときは, swoop が最近は大のお気に入り.

    [sourcecode language=”emacs-lisp” title=”” ]
    (require ‘swoop)
    (global-set-key (kbd “M-o”) ‘swoop)
    (global-set-key (kbd “C-M-o”) ‘swoop-multi)
    ;; (global-set-key (kbd “M-o”) ‘swoop-pcre-regexp)
    (global-set-key (kbd “C-S-o”) ‘swoop-back-to-last-position)

    (define-key isearch-mode-map (kbd “M-o”) ‘swoop-from-isearch)
    (define-key swoop-map (kbd “M-o”) ‘swoop-multi-from-swoop)

    ;; サイズ変更禁止
    (setq swoop-font-size-change: nil)
    [/sourcecode]

    imenu

    関数一覧を表示する. そのままだと動かなかったので, いかのリンクを参考にした.

    [sourcecode language=”emacs-lisp” title=”” ]
    (semantic-mode 1)
    (add-hook ‘python-mode-hook
    (lambda ()
    (setq imenu-create-index-function ‘python-imenu-create-index)))
    [/sourcecode]

    リファクタリング

    主に名前変更の Elisp を導入.

    参考リンク:

    anzu

    インタラクティブな補完.

    iedit

    C-;から気軽に同じキーワードを編集できる.

    Ropemacs

    Python 用のリファクタリングツール.

    コーディング支援

    jedi

    Python のオムニ補完 (かしこい補完) をしてくれる.

    ac-python

    auto-complete の python 強化版.

    [sourcecode language=”emacs-lisp” title=”” ]
    (require ‘ac-python)
    (add-to-list ‘ac-modes ‘python-2-mode)
    [/sourcecode]

    quickrun

    quickrun を利用すれば, python コードを Emacs から実行可能.

    システムの version が 3 で, Emacs からは 2 を利用したいときは, 以下のようにすれば実行コマンドをオーバライドできる.

    [sourcecode language=”emacs-lisp” title=”” ]
    (quickrun-add-command “python”
    ‘((:command . “python2”))
    :override t)
    [/sourcecode]

    静的解析

    flymake

    flymake でエラーチェックを実施. エラーチェックのエンジンに pyflakes を利用する.

    [sourcecode language=”bash” title=”” ]
    $ sudo pip install pyflakes
    [/sourcecode]

    Emacswiki を参考に設定.

    [sourcecode language=”emacs-lisp” title=”” ]
    (when (load “flymake” t)
    (defun flymake-pyflakes-init ()
    ; Make sure it’s not a remote buffer or flymake would not work
    (when (not (subsetp (list (current-buffer)) (tramp-list-remote-buffers)))
    (let* ((temp-file (flymake-init-create-temp-buffer-copy
    ‘flymake-create-temp-inplace))
    (local-file (file-relative-name
    temp-file
    (file-name-directory buffer-file-name))))
    (list “pyflakes” (list local-file)))))
    (add-to-list ‘flymake-allowed-file-name-masks
    ‘(“\\.py\\'” flymake-pyflakes-init)))
    [/sourcecode]