2012年1月11日
Emacsでauto-complete + pycompleteによるPythonの補完 (Gentoo Linux)
Emacsでのpython開発環境を強化しようと思い色々と設定を行っています。
補完機能について色々と試していたが、そこそこな設定ができたので記録を残しておきます。
Emacsでpythonの補完を行う方法は、pythonの思想に反して(?)色々方法があるようです。
ropemacs
pysmell
pycomplete
ac-python
あまりモジュールの依存が多いものは嫌だったので、pycompleteを使うことにしました。
なお、以下の設定はGentooでの設定に依存したものになります。
(一般的な部分もありますが...)
まず必要なパッケージをインストールします。括弧内に実際にインストールしたバージョンを記載しています。
# emerge app-editors/emacs (=app-editors/app-emacs-23.3-r2)
# emerge app-emacs/pymacs (=app-emacs/pymacs-0.23-r1)
# emerge app-emacs/python-mode (=app-emacs/python-mode-5.2.0)
# emerge app-emacs/auto-complete (=app-emacs/auto-complete-1.3.1)
また、Gentooのpython-modeではpycompleteがインストールされないためローカル環境に置きます。
python-modeインストール時に取得されたtgzが/usr/portage/distfilesにあるので、
そこから pycomplete.py と pycomplete.el を取り出します。以下のパスに配置しました。
$HOME/.emacs.d/local-site-lisp/pycomplete.el
$HOME/.emacs.d/pycomplete/pycomplete.py
続いて、Emacsの設定。$HOME/.emacsに以下を記述します。
;; portageでインストールされるelispを読み込む
(load "/usr/share/emacs/site-lisp/site-gentoo")
;; pycomplete.elを保存したディレクトリをload-pathに追加
(setq load-path (append '("~/.emacs.d/local-site-lisp") load-path))
;; auto-completeの設定
(add-to-list 'ac-dictionary-directories "~/.emacs.d/dict")
(require 'auto-complete-config)
(ac-config-default)
(setq ac-use-menu-map t) ; 補完ウィンドウでC-p,C-nで候補選択
;; pycomplete.pyをpymacsに渡す
(eval-after-load "pymacs"
'(add-to-list 'pymacs-load-path "~/.emacs.d/pycomplete"))
;; pycompleteをロードする
(add-hook 'python-mode-hook '(lambda () (require 'pycomplete)))
;; auto-completeでpycompleteを渡すための設定
(defvar ac-source-pycomplete
'((prefix "\\(?:\\.\\|->\\)\\(\\(?:[a-zA-Z_][a-zA-Z0-9_]*\\)?\\)" nil 1)
(candidates . ac-pycomplete-candidates)
(require . 0)))
(defun ac-pycomplete-candidates ()
(pycomplete-get-all-completions (py-symbol-near-point) (py-find-global-imports)))
;; auto-completeをpythonでも有効にする
;; (app-emacs/auto-complete-1.3.1ではpython-modeは設定されていない)
(add-to-list 'ac-modes 'python-mode)
(defun ac-python-mode-setup ()
(setq ac-sources (append '(ac-source-pycomplete)
ac-sources)))
(add-hook 'python-mode-hook 'ac-python-mode-setup)
;; M-hで即座にpycompleteによる補完を行う
;; XXX: ac-complete-pycompleteを利用すると、"sys."等のドット状態で補完ができない
;; XXX: そのため、ac-complete-interactive-pycompleteを定義して呼び出す
(global-set-key (kbd "M-h") 'ac-complete-interactive-pycomplete)
(defvar ac-source-pycomplete-interactive
'((prefix "\\(?:\\.\\|->\\)\\(\\(?:[a-zA-Z_][a-zA-Z0-9_]*\\)?\\)" nil 1)
(candidates . ac-pycomplete-candidates)
(requires . 0)))
(defun ac-complete-interactive-pycomplete ()
(interactive)
(auto-complete '(ac-source-pycomplete-interactive)))
ac-source-pycomplete-interactiveについてですが、関数定義の中身はac-source-pycompleteと一緒です。
ac-complete-interactive-pycompleteからac-source-pycompleteを呼び出すようにすると、
後述のドット(.)で補完を行うことができないため(原因不明)、別の関数で定義しています。
以上の設定で、以下のようにできます。
"sys.__" とか入力すれば、auto-completeで補完してくれる
"time." とか入力後、M-hでシンボル一覧が表示される
これでかなりイイ感じです。
以下のサイトを参考にしました。感謝!
[emacs][python] auto-complete と pycomplete で賢い補完
@yosisaさんのつぶやき
2012年1月3日
Googleリーダーのキーボードショートカット
RSSリーダーとしてGoogleリーダーを愛用しています。
よく使うキーボードショートカットは以下です。
- j : 次のアイテム
- k : 前のアイテム
- s : スターをつける
- Shift+a : 全て既読にする
なお、日本語入力が無効の状態で無いとキーボードショートカットは効かないです。
個人的Advent Calenderのまとめ
2011年のプログラミング系Advento Calenderの一覧です。(個人的に気になったもの)
- Python Advent Calender 2011 (全部俺)
- 2011 Pythonアドベントカレンダー (Python3)
- PyPy Advent Calender 2011
- Emacs Advent Calender jp: 2011
- Haskell Advent Calender 2011
- カーネル/VM Advent Calender
- Lispギャグ Advent Calender
- Android Advent Calender 2011
- hadoopアドベントカレンダー2011
また、Advent Calenderの一覧をまとめたサイト
登録:
投稿 (Atom)