Emacs

初心者が頑張ってEmacsを利用する話.
色々なサイトで述べられているので今更感満載ですが,誰かの役にたつと信じて.
※ご指摘等ありましたらmakabi [at] jnlp.orgまで.
※設定すごい変わっていたのに変更するのが遅くなった…ごめんなさい^^;
そして途中まで書いて力尽きたorz また今度書き足します.

当方の環境は以下の通り.
OS: Mac OS X Lion,CentOS 6,LinuxMint 12
Emacs: GNU Emacs 23
※基本的に全環境で同じ設定ファイルを転用している.
※インストールはbrewでもyumでもapt-getでも一発で入れられるはず.

環境構築

.emacs.d/の構成

Emacsの設定ファイルは.emcas.d/以下に格納することが推奨されています.
(一度Emacsを起動すると,$HOME直下に作成されているはず.)
Emacs起動時に.emacs.d/init.elが自動で読み込まれます.
私の.emacs.d/の構成は超シンプル.以下の通り(※随時変更有).
  • .emacs.d/
    • init.el
    • orig-lisp/  ... オリジナルのEmacs lisp置場
    • site-lisp/  ... 他所様から頂いたEmacs lisp置場

init.el

init.elはemacsを起動すると最初に読み込まれるファイルです.
このファイルに最低限書いておくことは,「各種設定ファイル/フォルダへのload-pathを通しておく」事だと思います(多分).
load-pathを通しておくことで,Emacsにどこから設定を読み込むのかを教えることができます.
(setq load-path (cons "~/.emacs.d/site-lisp" load-path))
(setq load-path (cons "~/.emacs.d/orig-lisp" load-path))
その他便利な設定はいっぱいあるので,色々調べてみてください.

orig-lisp/

基本的にorig-***.el形式でファイルを保存しています.
現在あるファイルは以下の通り.
  • orig-setting.el: Emacsの基本的な設定(括弧補完 etc.)
  • orig-python.el: Python関連の設定
これらのファイルを適応させるためには,init.elに以下の通り記述します(※orig-settingの例).
(load "orig-setting")

site-lisp/

site-lispは他サイト様から頂いた便利なElisp(Emacs lisp)ファイルが格納されています.
これらのElispファイルを自分の環境で利用するために,ダウンロードしてきたファイルをこのsite-lisp以下に置いて,それをEmacsに教える必要があります.
具体的な手順は以下の通り(※auto-completeの例,あえてmanual導入します)
 1. サイトからauto-complete-1.3.1.tar.bz2をdownload.
 2. downloadしたファイルをsite-lisp/以下で展開.
 3. init.elにload-pathを設定
(setq load-path (cons "~/.emacs.d/site-lisp/auto-complete-1.3.1" load-path))
 4. 上記サイトに従い,init.elに以下の行を追加(各々のファイルに追記情報が書かれているかと思います).
(require 'auto-complete-config)
(ac-config-default)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/site-lisp/auto-complete-1.3.1/dict")

Python環境の設定

Python関連の設定をまとめます.
EmacsのPythonモードにはpython.elとpython-mode.elがあります.
python.elは公式,python-mode.elはPythonコミュニティによって作成されたものです.
どちらがいいかは色々なとろこで議論されていますが,まぁ一長一短という印象です.
(興味のある方はこの2つで検索したら比較サイトなどいっぱい出てきます)
以下はpython.elを前提とした設定になります.

orig-python.elの設定

Pythonistaな方におすすめな設定を紹介.

改行時のオートインデント
(add-hook 'python-mode-hook '(lambda ()
  (define-key python-mode-map "\C-m" 'newline-and-indent)))

flymakeの設定
orig-python.elを編集する前に,以下の処理を実行
※外部チェッカーとしてpyflakes(文法チェック)とpep8(スタイルチェック)を利用.
※$HOME以下にpycheckerというファイルを保存
#!/bin/bash
pyflakes "$1"
pep8 --ignore=E221,E701,E202 --repeat "$1"
flymake-cursor.elをsite-lisp以下に保存.
(add-hook 'find-file-hook 'flymake-find-file-hook)
(when (load "flymake" t)
  (defun flymake-pyflakes-init ()
    (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 "~/pychecker"  (list local-file))))
  (add-to-list 'flymake-allowed-file-name-masks
               '("\\.py\\'" flymake-pyflakes-init)))
(load-library "flymake-cursor")
(global-set-key [f10] 'flymake-goto-prev-error)
(global-set-key [f11] 'flymake-goto-next-error)

あとはPymacsとかRopeとかyasnippetとか…
まとめるのにくじけたので,ココを参照してください.

※以下はorig-setting.el内の設定で,Pythonのコーディングに関連しそうなもの.

対応する括弧の補完
(global-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "{") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "[") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "\"") 'skeleton-pair-insert-maybe)
(global-set-key (kbd "\'") 'skeleton-pair-insert-maybe)
(setq skeleton-pair t)

tabの設定
(setq default-tab-width 4)
(setq indent-line-function 'indent-relative-maybe)

C-aで行頭とインデントを飛ばした行頭を行き来する.
(global-set-key "\C-a" 'beginning-of-indented-line)
(defun beginning-of-indented-line (current-point)
  (interactive "d")
  (if (string-match
       "^[ ¥t]+$"
       (save-excursion
         (buffer-substring-no-properties
          (progn (beginning-of-line) (point))
          current-point)))
      (beginning-of-line)
    (back-to-indentation)))

TeX環境の設定



参考サイト

Comments