基本機能のカスタマイズ

ここでは、私が行っているEmacsのカスタマイズのうち、 プラグインを必要としない基本機能のカスタマイズについて説明します。

ビープ音を消す

これ以上カーソルを移動できない場合などになるビープ音を消すことができます。

;; ビープ音を消す
(setq ring-bell-function 'ignore)

ring-bell-function という変数に、 'ignore という、 シンボルのようなものをセットすると、ビープ音がならなくなります。

タブではなく常にスペースを使うようにする

インデントにtabではなくスペースを使うようにします。

(setq-default indent-tabs-mode nil)

nil はelispにおいて特殊な文字で、nullのようなものです。

タブの幅を設定する

(setq tab-width 4)

オートインデントの幅や、tabの幅がスペース4つになります。 2をセットするとスペース2つになります。

UndoのキーバインドをC-zに設定する

C-zsuspend-frame を誤爆するので、C-z は普通に undo にします。 私は、 C-t をsuspendにしています。 好みの問題なので、ここではキーバインドの変更方法を学び、各自で好きなように設定してください。

;; C-z を undo に
(define-key global-map (kbd "C-z") 'undo)
;; C-t で suspend-frame
(define-key global-map (kbd "C-t") 'suspend-frame)

Emacsにおいて、undoやsuspendなどは関数で定義されています。 この設定では、キーボードの C-zundo 関数を割り当てています。

global-map は、Emacsのモードに関係なくあらゆる場面で使えるキーバインドであることを意味します。

同じキーに対して複数回 define-key が呼ばれた場合、 設定が上書きされ最後に設定したものが適用されます。

マウス操作関連

ターミナルから利用している場合は、ターミナルの設定にもよりますが、 Emacsはマウスイベントを取得できます。

;; xterm のマウスイベントを取得する
(xterm-mouse-mode t)
;; マウスホイールを取得する
(mouse-wheel-mode t)

t はelispで特別な意味を持ち、普通のプログラミング言語でいう true にあたります。 ffalse になります。

この設定をした上で、以下の設定をすることで、マウスでEmacsのカーソルを操作できたりします。 ただし、SSH接続した先でEmacsを起動した場合などは、有効にならない場合もあるので注意してください。

ホイールでポインタを移動できるようにする

;; ホイールでポインタを移動できるようにする
(global-set-key [mouse-4] (kbd "C-p"))
(global-set-key [mouse-5] (kbd "C-n"))

[mouse-4] [mouse-5] がホイールのイベントになります。 それぞれに、 C-p (カーソルを一行上に移動)などを割り当てています。 これはMacのトラックパッド向けの設定なので、逆方向にしたい場合は C-pC-n を入れ替えてください。

global-set-key(define-key global-map ...) と同じです。 実際はどちらかに統一するようにしましょう。

ポインタの移動ではなく画面をスクロールするようにする

;; ポインタの移動ではなくて画面をスクロールさせたい場合はこっち
(global-set-key   [mouse-4] '(lambda () (interactive) (scroll-down 1)))
(global-set-key   [mouse-5] '(lambda () (interactive) (scroll-up   1)))

こちらは、より直感的なホイールになります。

カーソルがある行をハイライトする

カーソルがある行をハイライトできます。 私は見づらくなるので行っていないのですが、カーソルをよく見失う人には便利かもしれません。

;; カーソルのある行のハイライトを有効にする
(global-hl-line-mode t)
;; ハイライトの色を設定します
(custom-set-faces '(hl-line ((t (:background "dark gray")))))
;; ハイライトのスタイルをアンダーラインにします
;; ただしアンダーバーが見えづらくなる問題があります
(setq hl-line-face 'underline)

矩形選択モードを利用する

TODO