老人なのでemacsでプログラムを書いていますが、最近はpythonを少しだけ書く必要があったので環境の話をまとめます。
melpa
にアクセスできることを想定してます。
念の為、バージョンに依存するところはないと思いますがpackage.el
を使うので24以上、
私の環境は26.1です。
;;; package.elの初期化 (when (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (package-initialize) )
elpy
M-x package-install elpy
殆どこれで終わる。
elpy
はpythonを書くためのパッケージなどをまとめてインポートする全部のせextension。
以下の機能がまとめて入る。
- 補完機能(jedi, company-mode)
- コードのシンタックスなどのチェックツール(autopep8, flake8)などとの連携
jedi + company-modeの例
flake8の警告
autopep8, flake8はそのままでは入らず、自前でpipなどでインストールする。
elpyからこの手のツールがどう見えているのかはelpy-config
でわかる。
elpy-enable
を事前に実行しておかなければならない。
(when (and (require 'python nil t) (require 'elpy nil t)) (elpy-enable))
elpyはpyenv
とのかみ合わせが悪く、使っている場合はexecutableのばしょを教えてあげないといけない。
python3.6とか使いたいので教えてあげよう。
(when (require 'set-pyenv-version-path nil t) (add-to-list 'exec-path "~/.pyenv/shims"))
company-quickhelp
必須じゃないが、わたしはauto-complete
に慣れていてcompany-mode
をなるべくこれに近づけたい。
company-modeは標準ではquick-helpが表示されず下のバーに表示する。
ヘルプを見たければC-r
で出すこともできるが、これで表示させることができる。
miscs....
company-modeの挙動を何とかする
company-mode
はとにかくこの枠組で入力させることが想定されているっぽくて、例えば
候補にない入力をしたり候補を無視してSPCを入力しようとすると、SPCが候補を確定するアクションになってしまう。
SPCを入力したときにcompany-modeのcompleteを無視するようにする。
(defun insert-space () (interactive) (insert-char ?\ )) (define-key company-active-map (kbd "SPC") 'insert-space)
customize-group
からcompany-continue-commands
にinsert-space
を追加する。
これは最初からnot
、つまりどの関数が実行されたらcompanyのcompletionを無視するかを指定できる。
こんなことしなくてもよさそう。
(setq company-require-match 'never)
キーバインド
python-mode
でC-c C-c
から*Python*
バッファを作ることができるが、このときの挙動を変更する。
このほうが便利。
(define-key inferior-python-mode-map (kbd "M-p") 'comint-previous-matching-input-from-input) (define-key inferior-python-mode-map (kbd "M-n") 'comint-next-matching-input-from-input)
雑感
Emacsは暴力で設定が書けるから楽だにゃん。