Emacs の設定ファイル (.emacs.el) の小技
TOP > チョロっとEmacs > Emacs の設定ファイル (.emacs.el) の小技

Emacs の設定は ~/.emacs.el に記述します。

日本語環境の最低限の設定は、

(set-language-environment "Japanese")
で、良いようですが、これだけでは使いものにならない、と言うか
設定を自在にできるのが Emacs の醍醐味だと思います。

と言うことで、.emacs.el の小技です。

Emacs23では文字コードがいちいち UTF になってしまったので、euc を使っている私は、

;; coding-system の設定
(set-default-coding-systems 'euc-jp-unix)
(setq default-file-name-coding-system 'euc-jp-unix)
(setq default-buffer-file-coding-system 'euc-jp-unix)
(setq default-terminal-coding-system 'euc-jp-unix)
(setq default-keyboard-coding-system 'euc-jp-unix)
にしています。



1 load-path の追加

;; load-path の追加
;; いちいち root になって、システム全体にインストールする必要のない、
;; 自分だけで使うような elisp は、自分のホームディレクトリに置いてます。
(setq load-path
      (append '("/home/hoge/site-lisp/my-only/"
		"/home/hoge/site-lisp/etc/"
   		)
   	      load-path))

2 オープニングメッセージを表示しない

;; オープニングメッセージを表示しない
(setq inhibit-startup-message t)

3 バックアップファイルを作成しない

;; バックアップファイルを作成しない
;; 危険なので、注意して下さい
(setq make-backup-files nil)

4 オートセーブファイルを作成しない

;; オートセーブファイルを作成しない
;; 危険なので、注意して下さい
(setq auto-save-default nil)
(setq auto-save-list-file-name nil)
(setq auto-save-list-file-prefix nil)

5 C-k 1回で行全体を削除する

;; C-k 1回で行全体を削除する
(setq kill-whole-line t)

6 行の最後に来たら、新しい行を作らない

;; 行の最後に来たら、新しい行を作らない
(setq next-line-add-newlines nil)

7 1行づつスクロールする

;; 1行づつスクロールする
(setq scroll-conservatively 1)

8 対応する括弧をハイライトする

;; 対応する括弧をハイライトする
(show-paren-mode 1)

;; 対応する括弧の色の設定
(setq show-paren-style 'mixed)
(set-face-background 'show-paren-match-face "grey")
(set-face-foreground 'show-paren-match-face "black")

9 カーソル位置の桁数をモードライン行に表示する

;; カーソル位置の桁数をモードライン行に表示する
(column-number-mode 1)

10 カーソル位置の行数をモードライン行に表示する

;; カーソル位置の行数をモードライン行に表示する
(line-number-mode 1)

11 リージョンを色付きにする

;; リージョンを色付きにする
(transient-mark-mode 1)

12 cursor の blink を止める

;; cursor の blink を止める
(blink-cursor-mode 0)

13 active でない window の空 cursor を出さない

;; active でない window の空 cursor を出さない
(setq cursor-in-non-selected-windows nil)

14 予約語を色分けする

;; 予約語を色分けする
(global-font-lock-mode t)

15 C-x C-b でバッファリストを開く時に、ウィンドウを分割しない

;; C-x C-b でバッファリストを開く時に、ウィンドウを分割しない
(global-set-key "\C-x\C-b" 'buffer-menu)

16 C-h を Backspace として使い、 C-c h を HELP に割当てる

;; C-h を Backspace として使い、
;; C-c h を HELP に割当てる
(keyboard-translate ?\C-h ?\C-?)
(global-set-key "\C-h" nil)
(global-set-key "\C-ch" 'help-command)

17 指定行にジャンプする

;; 指定行にジャンプする
(global-set-key "\C-xj" 'goto-line)

18.a bufferの先頭でカーソルを戻そうとしても音をならなくする

;; bufferの先頭でカーソルを戻そうとしても音をならなくする
(defun previous-line (arg)
  (interactive "p")
  (condition-case nil
      (line-move (- arg))
    (beginning-of-buffer)))

18.b bufferの最後でカーソルを動かそうとしても音をならなくする

;; bufferの最後でカーソルを動かそうとしても音をならなくする
(defun next-line (arg)
  (interactive "p")
  (condition-case nil
      (line-move arg)
    (end-of-buffer)))

19 エラー音をならなくする

;; エラー音をならなくする
(setq ring-bell-function 'ignore)

20 C-x C-l で現在行を top にする

;; C-x C-l で現在行を top にする
;; 元々は C-u 0 C-l
;; ちなみに C-l は現在行を center にする
(defun line-to-top-of-window ()
  "Move the line point is on to top of window."
  (interactive) 
  (recenter 0))
(global-set-key "\C-x\C-l" 'line-to-top-of-window)

21 isearch の文字を取得

;; isearch の文字を取得
;; C-s した後に C-d すれば search する文字の入力を省けることに。
(defun isearch-yank-char ()
  "Pull next character from buffer into search string."
  (interactive)
  (isearch-yank-string
   (save-excursion
     (and (not isearch-forward) isearch-other-end
          (goto-char isearch-other-end))
     (buffer-substring (point) (1+ (point))))))
(define-key isearch-mode-map "\C-d" 'isearch-yank-char)

22 キーバインドを変更する

;; キーバインドを変更する
;; 他のキーバインドに影響しないように、あらかじめ、
;; HELP k (このページの設定では、C-c h k) で確認しておいた方が良いでしょう。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; C-o
(defvar ctl-o-map (make-keymap))
(fset 'ctl-o-prefix ctl-o-map)
(define-key global-map "\C-o"  'ctl-o-prefix)

;; 1行空ける
(define-key global-map "\C-o\C-i"    'open-line)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; C-q
(defvar ctl-q-map (make-keymap))
(fset 'ctl-q-prefix ctl-q-map)
(define-key global-map "\C-q"  'ctl-q-prefix)
(define-key global-map "\C-q\C-q"    'scroll-down)

;; 例えば C-q C-i C-l で ^L の入力が可能
(define-key global-map "\C-q\C-i"    'quoted-insert)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; C-k
(setq kill-whole-line t)
(defvar ctl-k-map (make-keymap))
(fset 'ctl-k-prefix ctl-k-map)
(define-key global-map "\C-k"  'ctl-k-prefix)

;; 行全体を削除 Emacs22以降で有効
(define-key global-map "\C-k\C-k"    'kill-whole-line)

;; 行全体を削除 Emacs21の場合
(defun kill-all-line (&optional numlines)
  (interactive)
  (setq pos(current-column))
  (beginning-of-line)
  (kill-line numlines)
  (move-to-column pos))
(define-key global-map "\C-k\C-k"    'kill-all-line)

;; カーソル位置より後(右)を削除
(define-key global-map "\C-k\C-e"    'kill-line)

;; カーソル位置より前(左)を削除
(define-key global-map "\C-k\C-a"    (lambda ()(interactive)(kill-line 0)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; C-w
(defvar ctl-w-map (make-keymap)
  "keymap for kill or copy region")
(fset 'ctl-w-prefix ctl-w-map)
(define-key global-map "\C-w"  'ctl-w-prefix)

;; リージョンをコピー
(define-key global-map "\C-w\C-w"    'copy-region-as-kill)

;; リージョンを削除
(define-key global-map "\C-w\C-k"    'kill-region)

;; リージョンをコメント/アンコメント
(define-key global-map "\C-w\C-c" 'comment-or-uncomment-region)

;; リージョンをインデント
(define-key global-map "\C-w\C-i" 'indent-region)

23 メニューバーを消す

;; メニューバーを消す
(menu-bar-mode nil)
;; M-x menu-bar-mode で、メニューバーを表示/非表示

24 C-x b でバッファの内容を表示しながら、バッファを切り替え

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; C-x b でバッファの内容を表示しながら、バッファを切り替える
;; C-s,C-rで補完候補を選択
(iswitchb-mode 1)

(defadvice iswitchb-exhibit
  (after
   iswitchb-exhibit-with-display-buffer
   activate)
  "選択している buffer を window に表示してみる。"
  (when (and
         (eq iswitchb-method iswitchb-default-method)
         iswitchb-matches)
    (select-window
     (get-buffer-window (cadr (buffer-list))))
    (let ((iswitchb-method 'samewindow))
      (iswitchb-visit-buffer
       (get-buffer (car iswitchb-matches))))
    (select-window (minibuffer-window))))

25 日本語の locale が設定されている時の dired 対策

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 日本語の locale が設定されている時の dired 対策
(require 'ls-lisp)
(defadvice insert-directory
  (around reset-locale activate compile)
    (let ((system-time-locale "C"))
        ad-do-it))

26 c-mode のインデント幅(style)を変更する

c-mode のインデント幅は デフォルトではスペース2個分で、 タブの替わりにスペースが入力されます。
C言語ではこの記法は好きではないので、 スペース4個分タブが入力されるようにします。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; c-mode のインデントをスペース4個分のタブにする
(add-hook 'c-mode-common-hook
          '(lambda ()
             (c-set-style "k&r")
	     (setq c-basic-offset 4)
	     (setq indent-tabs-mode t)
	     (setq tab-width 4)))

TOP > チョロっとEmacs > Emacs の設定ファイル (.emacs.el) の小技
http://www.yumi-chan.com/