emacs初心者の設定いろいろ

 emacsを使い始めて早7年、初心者を名乗るのもなんだかなぁという感じではあるが、積極的に勉強せずにここまできてしまったので、未だに初心者レベルのことしかできない。しかし、初心者なりにいろいろと.emacsには便利な設定がたまってきたので、ここではそれらを紹介してみたい。

; ~/elispをロードパスに追加する。ダウンロードしてきたelispはぜんぶここに突っ込む
(setq load-path (cons (expand-file-name "~/elisp")        load-path))

; C-x bでバッファリストをミニバッファに表示する。超便利。
(iswitchb-mode 1)

; Ctrl-SPACEでマークセットするときに選択部分に色が付くようになる
(transient-mark-mode t)

; M-gでgoto-lineを使えるようにする
(global-set-key "\M-g" 'goto-line)

; Xを使っている場合の起動を高速化するらしいがよくわかってない
(modify-frame-parameters nil '((wait-for-wm . nil)))

; カーソルの色を変更
(add-to-list 'default-frame-alist '(cursor-color . "SlateGray"))

; スタートアップメッセージを非表示にする
(setq inhibit-startup-message t)

; 行番号だけでなく列番号も表示する
(column-number-mode 1)

; ツールバーは使わないので非表示に。意見が分かれるところかも。
(tool-bar-mode 0)
; メニューバーも同様。
(menu-bar-mode 0)

; 対応するカッコを色付けする
(show-paren-mode t)

; 行間をちょっと開ける
(setq-default line-spacing 0.15)

; インデントをタブではなく空白で行う
(setq-default indent-tabs-mode nil)

; xのクリップボードを使えるように
(setq x-select-enable-clipboard t)

 ; migemoを有効にする
(require 'migemo)

; dmacroを有効にする
; http://www.pitecan.com/papers/JSSSTDmacro/dmacro.el
(defconst *dmacro-key* "\C-p" "繰返し指定キー")
(global-set-key *dmacro-key* 'dmacro-exec)
(autoload 'dmacro-exec "dmacro" nil t)

; C-x C-fでのファイル補完の挙動をzshぽくする
; http://d.hatena.ne.jp/mooz/20101003/p1
; ディレクトリのところでリターンを押した時の挙動をカスタマイズ
; したいと思っているがまだ出来てない
(require 'zlc)
(let ((map minibuffer-local-map))
  ;;; like menu select
  (define-key map (kbd "<down>")  'zlc-select-next-vertical)
  (define-key map (kbd "<up>")    'zlc-select-previous-vertical)
  (define-key map (kbd "<right>") 'zlc-select-next)
  (define-key map (kbd "<left>")  'zlc-select-previous)
  
  (define-key map (kbd "C-c") 'zlc-reset)
  )

; physical-line modeを有効にする。
(require 'physical-line)
(add-hook 'find-file-hooks 'physical-line-mode)
(setq physical-line-ignoring-mode-list '(dired-mode))

; auto-complete modeを有効にする
(when (require 'auto-complete nil t)
   (global-auto-complete-mode t)
   (setq ac-dwim nil)
   (set-face-background 'ac-selection-face "steelblue")
   (set-face-background 'ac-menu-face "skyblue")
   (define-key ac-complete-mode-map "\t" 'ac-expand)
   (define-key ac-complete-mode-map "\r" 'ac-complete)
   (setq ac-auto-start t)

   (setq ac-sources '(ac-source-abbrev ac-source-words-in-buffer)))

 iswitchb-mode, transient-mark-mode, migemo.el, zlc.elあたりはもう必須で、ないと操作するのが非常に辛い。あとはauto-complete.elとdmacro.elぐらいがあれば生きていける。iswitchb-modeは一般にあまり便利だとあまり宣伝されていない気がするのだが、複数バッファを開いた時の表示バッファの切り替えという、非常にクリティカルな操作をおそろしく高速化してくれるので、知らないでemacsを使うのは無謀だというぐらいに便利なので、詳しく説明をしておく。以下、社内ブログに2年前にぐらいに書いた記事から一部転載。
 iswitchb-modeは複数ファイルを開いているときに、ファイル(より正確には、ファイルに対応するバッファ)間の移動を簡単に行うためのものです。新しめのemacsなら.emacsに1行書くだけで有効になります。
 iswitchb-modeが有効になっていると、C-x bで、下のミニバッファにバッファ一覧が出てくるようになります。それだけだと別に大したことはないのですが、そこで開きたいバッファ名を適当に入力すると、対象バッファが絞り込まれていきます。開きたいバッファが一番左に来たらエンターで決定。あと、C-sとC-rでバッファ一覧をひとつずらすことができます。同名のファイル(例えばMakefileとか)がたくさんある場合は絞り込みだけではなんともならないので、絞り込んだ後はC-sとC-rで目当てのバッファを一番左に移動させます。
 正直、これを覚えると、C-x C-bでバッファ一覧を出して移動するとか、メニューのBuffersからマウスでわざわざ選択するとか、めんどくさすぎてできなくなります。私も2年ぐらい前に知ったんですが、この機能を知ってから、ちょっとemacsをまじめに使いこなそうか、という気分になりました。