Emacs設定入門(Emacsをsetqする方法) 1. ポイント 1) Emacsの設定を行なう上での基本的な事柄を解説する(後で応用がきくように) 2) なるべく 例を多く使う 3) 参考になるリンク先と、それに必要な知識を補足 2. 解説手順 1) Emacsをカスタマイズするとは? 「Emacsを自分の目的にあったものに適合させる」といってもいいでしょう。 2) なぜカスタマイズするのか? 使いやすくするため。 -> そのためにはカスタマイズは必須でしょう。 3) Emacsのカスタマイズ手段 要はEmacsを自分の使いやすいものに設定できればいいのです。 どんな手段があるのでしょうか? a) .emacsファイルの変更(一番オーソドックスなやりかた。 実はこれだけではない) b) アプリケーションのインストール (一般的には.emacsの変更をともないます。) c) M-x customize-group を使う (.emacsの一部を自動的に変更してくれる) アプリケーションをインストールした後、アプリケーションごとのユー ザー設定をメニューで変更できるものです。(詳細は後述します。) ほとんどのアプリケーションは この customize に対応しています。 4) Emacsってどんなもの?( Emacs以外のユーザーを意識して... ) - ほとんどの制御アルゴリズムが lispで書かれています。 - 日常操作のいろんなところで lispが顔を出します。 - エディタとして使うなら lispの *さわり* だけを知れば 便利に使えます。 (最悪lispは知らなくて良い) - キーバインドが特殊です。(vi,wardster系 エディタを使っている人には変?) 5) .emacsを変更する場合に知っておきたいelispの基本 なるべく lisp用語を使わずに、説明します。 (*scratch* バッファで elispの基本を説明する) - S式 (+ 1 2) のような式のこと elispのソースはコメントを除いて全て S式です。 S式は 悪名高い '(' と ')' のネストした記述で表現します。 .emacs設定など一つのソースファイル中で '(' と ')' の対応が合っていれば OKです。 代表的な記述は ( 関数 引数1 引数2 ... ) のようなものです。 - シンボル シンボルはlisp特有のもので、C言語でいう識別子のようなものです。 シンボルには 文字列や値、リスト、関数など、なんでもバインドできます。 シンボルには 空(バインドされていない)という状態があります。 - setq 変数をセットする最も一般的な方法です。(lispではシンボルにバインドすると言う) * 表記方法 (setq シンボル 式) ※ 第一引数は評価されません。 * set との違い set という関数もある。※ 第一引数は評価されます。 (setq a b) は (set 'a b) と等価です。 'a は (quote a) と等価です。 (quote は シンボル a を評価しないようにする指定です。) setqの名前の q は quoted から来ています。 set だけでも事足りるのですが、いちいち quote しなければならず不便です。 - nil と t 特別なシンボルです。(値を変更することはできません。) tは真、nilは偽 を表わすのに使われます。(if 等の評価値や bool値を返す関数等) elispアプリケーションでは、機能をon/offする変数に t か nil を入れるようになっているものが多いです。 6) M-x customize を説明 - Emacsでカスタマイズできそうと思える部分はほとんどカスタマイズ項目に入っています。 - Mew(メールソフト)等のようなelispアプリケーションもこの customizeをサポートしています。 - customize を使えば、カスタマイズする人はelispを書く必要がありません。(これ重要) 以下のような問題を回避できるメリットあり -> .emacs程度のelispとえいどもプログラムにはかわりないのでバグがつきもの。 -> 連想リストなど、高度なlispのテクニック等を知らなくても 設定が可能。 - 実際に customize を使ってカスタマイズしてみましょう。 (C mode の オフセットサイズを使う) (man のfaceを変える) 7) ~/.emacsの位置付け (emacsの起動手順から見てみよう) - emacs を起動した時に最初にロードされるユーザー個別の設定ファイルです。 厳密には emacsが最初に読み込む startup.elというファイルからロードされます。 このファイルではemacsが起動した時に必要な初期化等が行なわれています。 -q オプションで .emacsを読み込まないようにする処理も startup.el の中で書かれています。 - startup.el の .emacs を読み込んでいるところをちらっと見てみる - 補足: ユーザー個別の設定用があるということは サイト個別の設定ファイル(site-start.el)もあります。 8) ロードパス - load-path という変数で emacsがelispソースをロードするディレクトリを指定します。(startup.elが使う) - 直接手で書くには以下のように書きます。 (setq load-path (append (list nil "m:\\") load-path))) ;; m:\ がホームディレクトリの場合 9) .emacs記述例 一般的な設定項目というのは省きます。応用がきくように 分岐等のパーツを解説します。 - よく使う記述例 ;; 変数の設定・変更 (setq 変数 値) ;; if による条件分岐 (if 条件 then節 else節:省略可) ;; cond による条件分岐(C言語でいう switchみたいなもの) (cond (条件1 (実行式1) (実行式2)) (条件2 (実行式1) (実行式2)) (t ;; C言語でいう default: (実行式1) (実行式2))) ;; キーバインドの変更 (define-key global-map "\C-h" 'delete-backward-char) - emacs バージョン分けのテクニック ;; cond を実際に使う (cond ((string-equal window-system "w32") (setq load-path (append (list nil "m:\\") load-path))) (t (setq load-path (append (list nil "/home/kiyoka/") load-path)))) (cond ((string-equal window-system "w32") (load ".emacs_meadow.el")) ; Meadow用初期化ファイル ((featurep 'xemacs) (load ".emacs_x.el")) ; XEmacs 用初期化ファイル ((string-match "20" emacs-version) (load ".emacs_20.el")) ; Emacs 20.x 用初期化ファイル ((string-match "21" emacs-version) (load ".emacs_21.el")) ; Emacs 21.x 用初期化ファイル (t (load ".mule.el") ; Emacs19.34 用初期化ファイル )) (load ".emacs_common.el") ; 共通設定ファイル 9) elispを電卓として使う - *scratch* バッファで 遊ぶ 会計係シュミレーション 3. リンク 1) Emacs lisp リファレンスマニュアル 2)