モノノフ日記

普通の日記です

emacsカスタマイズ

今度は開発言語がPHPっぽいのでLinuxで開発環境整えた。
部内向けにまとめた資料だけど転載しちゃえw

元がWikiフォーマットで書いてたのでリンク先繋がってません(汗

Emacs FAQ

コーディングするのに便利なelisp
引用部分は${HOME}/.emacsに追加するコマンド
リンク先を張っていないlispはデフォルトで組み込まれてます
DL先から落としてきた.elファイルはloadpath先に置いてください(ex. /usr/share/emacs/21.3/site-lisp/)

transient-mark-mode

Ctrl-SPACEでマークセットするときに選択部分に色が付くようになる

;; transient-mark-mode
(transient-mark-mode t)

windmove-default-keybindings

emacsの画面をCtrl-2などで分割したときにShift+矢印キーで分割ウィンドウの移動が可能

;; windmove-default-keybindings
(windmove-default-keybindings)

dired-x

C-x C-jでディレクトリ一覧からファイルを開ける

;; dired-x
(load "dired-x")

iswitchb-mode

C-x bでバッファを選択するのが楽になる

;; iswitchb-mode
(iswitchb-mode t)

show-paren-mode

対応するカッコを色付きにする

;; show-paren-mode
(show-paren-mode t)
(setq show-paren-style 'mixed)
(set-face-background 'show-paren-match-face "gray10")
(set-face-foreground 'show-paren-match-face "SkyBlue")

php-mode

php用のインデントや変数・関数への色付けをやってくれる
まずはphp-mode.elを移動

$ tar xzvf php-mode-1.2.0.tgz
$ mv php-mode.el /usr/share/emacs/21.3/site-lisp/

emacsを起動して、M-x byte-compile-fileを実行してphp-mode.elを指定

.emacsを編集

;; php-mode
(load-library "php-mode")
(require 'php-mode)

これで.phpファイルはphpモードで起動するようになる
追加でphpのマニュアルを拾ってくれば関数補完もできるようになったりもする

;; php-mode
(load-library "php-mode")
(require 'php-mode)
(add-hook 'php-mode-user-hook
'(lambda ()
(setq php-manual-path "/usr/local/share/php/doc")))

mmm-mode

ひとつのバッファで2つのメジャーモードを使用するためのモード。要はひとつのバッファで html-mode と php-mode を一緒に使用可能になる

DLしてきたファイルを解凍してコンパイル

$ tar xzvf mmm-mode-0.4.8.tar.gz
$ cd mmm-mode-0.4.8
$ ./configure
$ make
$ make install

.emacsに設定を書く

;; mmm-mode
(require 'mmm-mode)
(setq mmm-global-mode 'maybe)
(mmm-add-mode-ext-class nil "\\.php?\\'" 'html-php)
(mmm-add-classes
' (add-to-list 'auto-mode-alist '("\\.php?\\'" . html-mode">*1

ELScreen

バッファをタブウィンドウで表示できるようになる。ちょー便利。

$ tar xzvf elscreen-1.4.3.tar.gz
$ cp elscreen-1.4.3/elscreen.el /usr/share/emacs/21.3/site-lisp/

.emacs

;; elscreen
(load "elscreen" "ELScreen" t)

操作方法

* 新規タブ C-z c
* 新規タブにコピー C-z C
* タブを閉じる C-z k
* タブを閉じ、バッファもkill C-z M-k
* カレントタブを以外を閉じる C-z K
* 次のタブに移動 C-z n
* 前のタブに移動 C-z p
* 直前のタブに移動 C-z a

ElScreen-GF

キーワード追跡。サポートしてるのはgrep、ID Utils、cscope

$ tar xzvf elscreen-gf-1.5.1.tar.gz
$ cp elscreen-gf-1.5.1/elscreen-gf.el /usr/share/emacs/21.3/site-lisp/

.emacs

;; elscreen-gf
(load "elscreen-gf" "ELScreen-GF" t)

操作方法はREADME参照。まだ自分も詳しくわかってないんで(;

kill-summary

kill-ringの一覧を表示して、選択コピペできるようになる。これも相当便利
リンク先を保存して、/usr/share/emacs/21.3/site-lispにcp
.emacs

;; kill-summary
(autoload 'kill-summary "kill-summary" nil t)
(define-key global-map "\ey" 'kill-summary)

M-yで今までのkill-ring一覧が出てくる。
n,pで選択、ENTERで決定

dmacro

繰り返しマクロ。同じ動作を1ボタンで繰り返し行うことができる
リンク先を保存して、/usr/share/emacs/21.3/site-lispにcp
.emacs

;; dmacro
(defconst *dmacro-key* "\C-t" "繰り返し指定キー")
(global-set-key *dmacro-key* 'dmacro-exec)
(autoload 'dmacro-exec "dmacro" nil t)

同じ動作した後、C-tでひたすらコピペできる。詳細はHP参照。

mic-paren

カッコ内の文字を強調表示する .emacs

;; mic-paren
(if window-system
(progn
(require 'mic-paren)
(paren-activate) ; activating
(setq paren-match-face 'bold)
(setq paren-sexp-mode t)
(setq parse-sexp-ignore-comments t)
))

psvn

Subversionemacsフロントエンド
.emacs

(require 'psvn)

(define-key svn-status-mode-map "q" 'egg-self-insert-command)
(define-key svn-status-mode-map "Q" 'svn-status-bury-buffer)
(define-key svn-status-mode-map "p" 'svn-status-previous-line)
(define-key svn-status-mode-map "P" 'svn-status-next-line)
(define-key svn-status-mode-map "<" 'svn-status-examine-parent)

(add-hook 'dired-mode-hook
'(lambda ()
(require 'dired-x)
;;(define-key dired-mode-map "V" 'cvs-examine)
(define-key dired-mode-map "V" 'svn-status)
(turn-on-font-lock)
))

(setq svn-status-hide-unmodified t)

一通りの操作はemacsから行えた。
まだ軽くしか触ってないので使いこなす必要あり←参考HP

ac-mode

インテリジェント補完コマンド
PATH の補完, URL の補完, 文字列の補完 (dabbrev), インデントを ひとつのコマンド, つまりひとつのキーでやってしまおうというもの
.emacs

(load "ac-mode")
(add-hook 'php-mode-hook 'ac-mode-on)
(add-hook 'mmm-mode-hook 'ac-mode-on)

TABキーで補完できます。これヤバ便利
URLの補完をするためにはホームディレクトリにurls.txtを作成する必要があります
urls.txtのフォーマットは各行がhttp:で始まるプレーンテキストでソートされている必要がある
ブラウザのhistory.datからhttp:〜を抜き出してくるといいかも

*1:html-php :submode php-mode :front "<\\?\\(php\\)?" :back "\\?>"))) (add-to-list 'auto-mode-alist '("\\.php?\\'" . html-mode