.emacs
で設定している項目Last Updated at $Date: 2005/12/04 03:36:05 $.
このページの内容は,Emacs-21.3
で動作確認しています.
version によっては変数名や関数名の変更などにより動作しないことが有り得ますので,
ご注意下さい.バグレポートや感想などは tsuchiya@namazu.org までお願いします.
日本語 EUC のファイルと端末を使う場合,
少なくとも以下の設定を ~/.emacs
に書く必要があります.
(set-language-environment "Japanese") (set-default-coding-systems 'euc-japan) (set-terminal-coding-system 'euc-japan)
次のようなコードを,~/.emacs
に加えてください.
(global-set-key "\C-m" 'newline-and-indent) (global-set-key "\C-j" 'newline)
好みによって,関数 newline-and-indent は,関数 reindent-then-newline-and-indent にしておくほうが良いかもしれません.
関数 newline-and-indent 及び reindent-then-newline-and-indent は, 変数 indent-line-function で指定された関数を呼び出しているので, 適宜,この変数を設定しておく必要があります. (Cf. yahtml-mode を便利に使う)
Window mode で利用する場合は Del キーを1文字削除に bind し, 端末上で利用する場合は,BSキーと Delキーを入れ換えています.
(if window-system (global-set-key [delete] 'delete-char) (load "term/keyswap"))
また,日本語入力フロントエンドとして egg を利用している場合は, フェンスモードのキーバインドも調整しておくと良いでしょう.
(if window-system (progn (global-set-key [delete] 'delete-char) (define-key fence-mode-map [delete] 'fence-delete-char)) (load "term/keyswap"))
マシン毎に設定を切り替える場合,関数 system-name
を利用して実行中のマシンの名前を調べることが出来ます.以下の例では,
system-name の返り値が,host.domain.or.jp
となる場合と,単に
host
となる場合があるので,どちらにも対応させるために正規表現を使っています.
(let ((system-name (system-name))) (cond ;; systemA または systemB で実行中の場合 ((string-match "^\\(systemA\\|systemB\\)\\(\\..+\\)*$" system-name) (load "~/.emacs-AorB")) ;; systemC で実行中の場合 ((string-match "^systemC\\(\\..+\\)*$" system-name) (load "~/.emacs-C")) ;; 指定されていないマシンで実行中の場合 (t (message (concat "Unknown Host: " system-name)))))
※ system-name の他,system-type や system-configuration を用いることもできます.
ファイルの拡張子とメジャーモードとの対応関係は,変数
auto-mode-alist に格納されています.例えば,.tex
という拡張子のファイルを yatex-mode で開くようにするには,次のような設定を加えて下さい.
(setq auto-mode-alist (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))
複数の拡張子に対する指定を同時に加えるには,次のようにすれば良いでしょう.
(setq auto-mode-alist (append '(("\\.sh$" . fundamental-mode) ("\\.perl$\\|\\.p[hlm]$\\|/perl/" . perl-mode)) auto-mode-alist))
ファイルの先頭に #!
で始まる行があった場合,
そのファイルをスクリプトのソースと判断して,指定されている interpreter
によってメジャーモードを決定します.この対応関係は,変数
interpreter-mode-alist に格納されているので,
次のようなコードを ~/.emacs
に加えて下さい.
(setq interpreter-mode-alist (append '(("jperl" . perl-mode) ("sh" . fundamental-mode) ("bash" . fundamental-mode)) interpreter-mode-alist))
次のようなコードを ~/.emacs
に加えておくと,
#!
で始まる行が含まれている
(defun make-file-executable () "Make the file of this buffer executable, when it is a script source." (save-restriction (widen) (if (string= "#!" (buffer-substring-no-properties 1 (min 3 (point-max)))) (let ((name (buffer-file-name))) (or (equal ?. (string-to-char (file-name-nondirectory name))) (let ((mode (file-modes name))) (set-file-modes name (logior mode (logand (/ mode 4) 73))) (message (concat "Wrote " name " (+x)")))))))) (add-hook 'after-save-hook 'make-file-executable)
通常,M-/ に登録されている dabbrev-expand は非常に便利なコマンドです.
例えば,別のバッファに print という単語がある時に pr M-/ と入力すると,
残りの int が展開入力されて print という語が完成します.
dabbrev-highlight.el
は,動的略称展開の対象となった文字列を強調表示する拡張で,
オリジナルは白井さんによって作成されました.
このページで配布している版は,ミニバッファ内部で略称展開を行った時に1行表示を行わない,
という点が異なっています.
dabbrev-highlight.el
を適当な場所にコピーしてから,次の設定を ~/.emacs
に追加してください.
(require 'dabbrev-highlight)
なお,Emacs20 以降の環境では日本語を含む動的略称展開がうまく動かないので, 追加設定が必要です.
kill-ring の過去の内容を参照するための yank-pop (M-y) というコマンドは頻繁に利用するにも関わらず,使いづらいコマンドです. どうしてかなあと思ったのですが,それは, 「次にどのような文字列が挿入されるのか, 実行してみないと分からない」という点が原因なのではないかと考えました. この問題を解決するため, yank-pop が呼び出されると,以下のように自動的に kill-ring の概略を表示する拡張を作成しました.
このファイルを適当な場所にコピーしてから,
以下の設定を ~/.emacs
に追加してください.
(autoload 'yank-pop-forward "yank-pop-summary" nil t) (autoload 'yank-pop-backward "yank-pop-summary" nil t) (global-set-key "\M-y" 'yank-pop-forward) (global-set-key "\C-\M-y" 'yank-pop-backward)
yank-pop を使いやすくしようとする拡張としては,他に
kill-summary.el
や browse-kill-ring.el
などが知られているので,使い比べてみると面白いのではないでしょうか.
Emacs 上からシェルのコマンドを実行するには幾つかの方法があります.
後者の方法によるシェルコマンドの実行は, コマンドの出力を編集中のバッファに挿入したい場合に特に便利です. 例えば,適当なバッファで C-u M-! ls RET としてみると,ls の結果がカレントバッファに挿入されます.
この方法では,ミニバッファにコマンド文字列を入力するわけですが, その際にコマンド名やファイル名などの補完が行われるようにする拡張を作成しました.
このファイルを適当な場所にコピーしてから,
次の設定を ~/.emacs
に追加してください.
(require 'shell-command) (shell-command-completion-mode)
shell-mode を利用する場合の Tips を紹介します.
sudo
や su
などのコマンドを shell-mode
のバッファ内で実行すると,パスワードが見えてしまって困ったことはありませんか?
そのような場合は,以下の設定を ~/.emacs
に加えてください.
(add-hook 'comint-output-filter-functions 'comint-watch-for-password-prompt)
kterm
などの端末上で ls --color
を実行すると,
ファイルの種別毎に色分けをしてくれるので,視認性が上がって便利です.
しかし,同じことを shell-mode のバッファ内で行っても,
変な文字列(= エスケープシーケンス)が表示されるだけで,
期待したようには色がついてくれません.
そのような場合は,以下の設定を ~/.emacs
に加えてください.
(autoload 'ansi-color-for-comint-mode-on "ansi-color" "Set `ansi-color-for-comint-mode' to t." t) (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
Emacs で C のソースを編集する時,デフォルトではインデント幅が2になります. これを変更するには,以下のように変数 c-default-style を変更してください.
(setq c-default-style "user")
変数 c-style-alist に,様々な設定が登録されているので, その中から好みのものを選ぶことができます.
RCS は,ソースコードなどの履歴管理のためのツールです.
source.c source.c.1998-Oct-30 source.c.1998-Nov-12
などのように,ファイル名に日付を入れたりしてファイルの履歴を管理するのに苦労している人は,是非とも RCS を使いましょう.RCS については, 河邉岳人さんの「RCS 超入門」が参考になります.
ところが,漢字を含むファイルを RCS で管理しようとする場合は,少しだけ注意が必要です. ファイルを登録( check-in )する時に,作業記録をつけることができるのですが, そのための漢字コードをきちんと統一しておかないと,作業記録が文字化けしてしまいます. 以下の例は,作業記録を日本語 EUC で登録するための設定です.
(modify-coding-system-alist 'process "^rlog" '(undecided . euc-jp-unix)) (modify-coding-system-alist 'process "^ci" '(undecided . euc-jp-unix)) (modify-coding-system-alist 'process "diff" '(undecided . euc-jp-unix)) (modify-coding-system-alist 'process "^cvs" '(undecided . euc-jp-unix))
この項目は別のページになっています.
この項目は,別のページになっています.
この項目は,別のページになっています.
この項目は, emacs-w3m 公式ページに移管されました.
mode-info は,メジャーモードに対応して適切な関数・変数の説明を表示するように describe-function / describe-variable を拡張するプログラムです.
この項目は,別のページになっています.
display-deadline.el
を適当な場所にコピーしてから,次の指定を ~/.emacs
に付け加えてください.
(require 'display-deadline) (display-deadline "卒論提出まであと%d日%h時間%m分" (encode-time 0 30 11 15 2 2002))
この例の締切時間は「2002年2月15日11時30分」ですが, この時刻を Emacs-Lisp の時間関数が利用する形式に変換するために encode-time 関数を利用しています. 詳しくは,encode-time 関数の関数説明文を参照してください.
dired は,Emacs-Lisp で記述されたファイラーです.
初期設定の状態では,dired は ls
コマンドの実行結果を利用しています.
そのため,ls
コマンドの出力に日本語が含まれていると,dired
が正しく動かないことがあります.
そのような場合は,以下の設定を ~/.emacs
に追加して,Emacs-Lisp で記述された insert-directory 関数を利用するようにすれば,
ls
コマンドの出力形式に左右されないようになります.
(require 'ls-lisp) (let (current-load-list) (defadvice insert-directory (around reset-locale activate compile) (let ((system-time-locale "C")) ad-do-it)))
どんな関数,変数があるのかを調べるときに使うコマンドです.例えば, Info 関係の変数を調べている場合は,M-x apropos Info とすると, Info を名前に含む関数及び変数が表示されます. (デフォルトで C-h a にバインドされている command-apropos とは,表示される情報が異なりますので,混同しないよう注意してください)
関数の機能を表示するコマンドです.「GNU Emacs Lisp リファレンス・マニュアル」と「関数・変数の説明文を参照するコマンド」も参照して下さい.
変数の値とその意味を表示するコマンドです.~/.emacs
で設定した値が反映されているか,チェックしたい場合は,~/.emacs
を開いて,調べたい変数にカーソルを合わせて C-h v RET
とすれば,変数の値を表示してくれます.
また,mule のバージョンを確認したい場合は,C-h v mule-version
としてください.「GNU Emacs Lisp
リファレンス・マニュアル」と「関数・変数の説明文を参照するコマンド」も参照して下さい.
和文のテキストを紹介しています.これ以外にも知ってるよ,という方は,是非, tsuchiya@namazu.org まで連絡してください.
Emacs Lisp リファレンス・マニュアルには2つの大きく異なる版があります.
Emacs-19.29対応の原作2.4版の翻訳は,透土社から1995年に出版されました.
ftp://ftp.m17n.org/pub/mule/elisp-manual-19-2.4-jp2.0.tar.gz
@node
の指定が欠けている部分を補完するパッチ
Emacs-20.3 対応の原作 2.5 版の翻訳が,ASCII から発売されています.
ftp://ftp.ascii.co.jp/pub/GNU/elisp-manual-20/elisp-manual-20-2.5-jp.tgz
@node
の指定が欠けている部分を補完するパッチ
この Info は Emacs Lisp でプログラミングする時にとても役に立つので,頻繁に参照します. しかし,その度に Info に移動してから検索するのは面倒になったので, 関数名や変数名を指定すると Info の該当部分を表示するコマンドを作成しました.
GNU の配布に含まれている『Programming in Emacs Lisp: A simple introduction』の翻訳です.
Emacs-20.6 に対応した翻訳が,ASCII から発売されています.
[Top] / [Emacs Lisp Tips]