はじめに
肥大化してデブになった emacs設定を一旦捨て去り、一から作り直すことにした。
デブは自分のお腹だけで十分だ!(名言)
Motivation
以前は、こんな感じの設定ファイルを作っていたのだけれども、複雑になりすぎた。
また、データサイエンスをやるにつれて、以下のようなことがあり、Emacsを使いたくなってきた。
- 自宅サーバにsshで自習室からつないで作業することが多いので、Pycharm使えない。
- Jupyter Notebookを使うことが多いが、Jupyter Notebookでは、スクリプトかけない。
- 今まで素の Emacsでしのいできたのだけれども、辛くなってきた。
- ターミナルかっこいい\(o)/
目指す姿
- データサイエンス、もっと言えばPythonに特化した環境を作りたい
- 軽い環境を作りたい
- できるだけシンプルにしたい
Environment
- Ubuntu 16.04
- Python 3.6(Anaconda)
- Emacs 25.x
最新版Emacsを投入
まずは、Ubuntuに25系のversionをインストールする。
sudo add-apt-repository ppa:kelleyk/emacs
sudo apt-get update
sudo apt-get install emacs25
sudo update-alternatives --config emacs
リポジトリ & 設定ファイルを作成
.emacs.dを gitで世代管理して、githubにバックアップしたい。まずは、emacs用のリポジトリを作成。
init.elも作成。ここを参考にして、カスタムディレクトリを起点に起動できるように記述。
(when load-file-name
(setq user-emacs-directory (file-name-directory load-file-name)))
続いて、このリポジトリを利用して起動するためのスクリプトを作成して、パスの通ったところに置く。
#!/bin/bash
emacs -nw -q -l /home/tsu-nera/dotemacs-for-data-science/init.el $1
パッケージ管理をどうするか?
以前はuse-packageを使っていた。しかし、今回はシンプルにしたいので、デフォルトで搭載されているパッケージ管理ツール package.elを使うことにする。以下の記事によると、25.1からはインストールされたパッケージが package-selected-package 変数に保持されるようになったらしい。
以下の設定を inti.elに書くことで、custom.elに設定を吐き出すようにする。
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
(when (file-exists-p custom-file)
(load custom-file))
package-installでインストールできるパッケージを増やすために、リポジトリを追加する。
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("marmalade" . "https://marmalade-repo.org/packages/"))
(fset 'package-desc-vers 'package--ac-desc-version)
(package-initialize)
Python開発環境
ここからが本番! データサイエンスのために Python開発環境を整える。過去記事を参考に(古くてあまり参考にならないですが)、設定を書いていく。
python-mode - メジャーモード
メジャーモードはデフォルトの pythonパッケージではなく、python-modeをつかう。なんとなく。
(require 'python-mode)
(add-to-list 'auto-mode-alist '("\\\.py\\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
flycheck, flake8 - 静的解析
Pythonの静的解析ツールとして flake8, それをつかうためのインタフェース flycheckを入れる。
pip install flake8
python-modeのときだけ有効。
(defun tnoda/turn-on-flycheck-mode ()
(flycheck-mode 1))
(add-hook 'python-mode-hook 'tnoda/turn-on-flycheck-mode)
jedi - 自動補完
jedi は pythonのための 自動補完ツール。
pip install jedi
(add-hook 'python-mode-hook 'jedi:setup)
(setq jedi:complete-on-dot t)
jedi は Emacsの補完ツール , auto-completeを使っているので、その設定もしておく。
(require 'auto-complete-config)
(ac-config-default)
(global-auto-complete-mode t)
yapf - 自動フォーマット
自動でいい感じに整形してくれるツールを入れる。autopep8という古参なツールもあるけれども、新しい方を採用。
pip install yapf
;; py-yapf - auto format
(require 'py-yapf)
(add-hook 'python-mode-hook 'py-yapf-enable-on-save)
ひとまず完成した init.el