私が使っているEmacsの基本設定

2023年2月18日
thumbnail
主観的にemacsはデフォルトで設定されている項目が多いエディタだと思っています。例えば、バックアップファイルの自動生成の機能は、確かにありがたいのですが、index.htmlを編集していたら自動的にindex.html~が生成されるのはちょっと邪魔だったりします。 その他にも私はCUI版のemacsを使っているので、使わないナビゲーションバーが表示されているのも邪魔だったりします。この記事では私が設定しているemacsの基本設定を紹介します。
ここで書かれているコードは全て~/.emacs.d/init.elに書かれます。 一番下にここで書かれているコードをまとめてあります。

使用言語設定

;; 利用する自然言語と文字コードを設定
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)
プログラミングでは半角英数字を利用しますが、markdown、org、Latexみたいに日本語を使う場面もあるのでJapaneseを指定します。文字コードは特に理由がない限りはutf-8を使います。

メニューバーの表示非表示

;; CUIではメニューバーを隠す
(unless (display-graphic-p)
  (menu-bar-mode -1))
emacsのモードがGUIまたはCUIか判定して、CUIならばメニューバーを非表示にします。
メニューバーを表示。
article image
メニューバーを非表示。
article image

文字のはみ出し記号を非表示

emacsをCUI版で利用していると、一行の文字数が長くて画面からはみ出た場合、$が表示されて、画面外に続いていることを表してれます。ただ、コードでもドルマークを使う言語があり、視認性に問題が出るので非表示にします。
article image
;; 画面から文字がはみ出す時に表示される$マークを消す。
;; https://stackoverflow.com/questions/8370778/remove-glyph-at-end-of-truncated-lines
;; Fixed by https://lists.gnu.org/archive/html/bug-gnu-emacs/2015-04/msg00964.html
(make-glyph-code ?\\s 'vertical-border)
(set-display-table-slot standard-display-table 0 ?\\ )
article image

改行の時にバックスラッシュを表示させない

一行の文字数が長くて画面端で改行するときに、表示されるバックスラッシュを非表示にします。
改行するか、画面外にはみ出させるかの切り替えはM-x toggle-truncate-linesで切り替えられます。
article image
;; 改行の時にバックスラッシュを表示させない
;; https://www.emacswiki.org/emacs/LineWrap
(set-display-table-slot standard-display-table 'wrap ?\\ )
article image

ファイル情報の表示

ファイルをバッファーで開くと、下のモードラインに情報が表示されます。デフォルトだと、カーソルの位置が全体から見て何%の位置にあるかと、カーソルの位置の行番号しか表示されません。
article image
;; 行番号を表示
(column-number-mode t)

;; ファイルサイズを表示
(size-indication-mode t)
ファイルのサイズとカーソルの位置情報がファイルサイズ (行番号, 行の先頭からのカーソルの位置)という形式で表示されます。
article image

括弧の設定

カーソルを括弧に合わせると対応する括弧をハイライトする機能をアクティブにします。
;; カーソルを括弧に合わせると対応する括弧をハイライトする
(show-paren-mode t)

;; 対応する括弧のハイライト表示の遅延を0秒にする
(setq show-paren-delay 0)

インデントの設定

emacsのインデントはタブかスペースです。最近はスペース利用が標準になってきたので、改めてインデントはスペースを利用することを宣言します。この設定はemacsの一般的で利用することを規定するだけで、個別のメジャーモードでは別に指定する必要があったりします。例えばjs-modeは改めてjs-mode内でインデントの設定をしないとタブになったりしたはずです。
;; インデントをタブにするモードを非アクティブ
(setq-default indent-tabs-mode nil)

;; デフォルトタブ幅の設定
(setq default-tab-width 2)
(setq tab-width 2)

ファイルのバックアップ設定

emacsはファイルを編集していると自動的に同じ場所にファイル名~というバックアップファイルを作成します。便利は便利なのですが、意図し無いファイルが生まれてしまいプログラムを書くうえではセキュリティ的に問題になったりします。ただバックアップは便利なのでオフにしてしまうのは勿体無いので、専用のbackupフォルダに格納する設定を記述します。
;; オートセーブファイルを~/.emacs.d/backups/へ集める
(add-to-list 'backup-directory-alist(cons "." "~/.emacs.d/backups/"))
(setq auto-save-file-name-transforms
      `((".*" ,(expand-file-name "~/.emacs.d/backups/") t)))
ファイルのバックアップは~/.emacs.d/backups/に自動的に保存されます。

カスタム設定を別ファイルにする

use-packgeを使っていると、サードパーティ製のパッケージをインストールしたときにvariablesやfacesの設定が自動的にinit.elに挿入されます。
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(package-selected-packages '(use-package)))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )
パッケージの設定は自分で記述したいので、自動挿入機能を無効にします。custom.elへ代わりに自動挿入させることで回避します。
;; パッケージをインストールした後に自動的に挿入される設定をinit.elからcustom.elに移動させる。
;; https://qiita.com/javacommons/items/87bebffc4183a48cf070
(setq custom-file "~/.emacs.d/custom.el")
(condition-case nil
    (load custom-file)
  (error nil))

まとめ

これらが、私の基本設定です。恐らく何も設定しないよりかは便利になったと思います。基本設定はemacsを使うならどこでも利用できるので、どんどん蓄積していきましょう。
;; 利用する自然言語と文字コードを設定
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)

;; CUIではメニューバーを消す
(unless (display-graphic-p)
  (menu-bar-mode -1))

;; 画面から文字がはみ出す時に表示される$マークを消す。
;; https://stackoverflow.com/questions/8370778/remove-glyph-at-end-of-truncated-lines
;; Fixed by https://lists.gnu.org/archive/html/bug-gnu-emacs/2015-04/msg00964.html
(make-glyph-code ?\\s 'vertical-border)
(set-display-table-slot standard-display-table 0 ?\\ )

;; 改行の時にバックスラッシュを表示させない
;; https://www.emacswiki.org/emacs/LineWrap
(set-display-table-slot standard-display-table 'wrap ?\\ )

;; 行番号を表示
(column-number-mode t)

;; ファイルサイズを表示
(size-indication-mode t)

;; カーソルを括弧に合わせると範囲を表示する
(show-paren-mode t)

;; 範囲表示の遅延を0秒にする
(setq show-paren-delay 0)

;; インデントをタブにするモードを非アクティブ
(setq-default indent-tabs-mode nil)

;; デフォルトタブ幅の設定
(setq default-tab-width 2)
(setq tab-width 2)

;; オートセーブファイルを~/.emacs.d/backups/へ集める
(add-to-list 'backup-directory-alist(cons "." "~/.emacs.d/backups/"))
(setq auto-save-file-name-transforms
      `((".*" ,(expand-file-name "~/.emacs.d/backups/") t)))

;; パッケージをインストールした後に自動的に挿入される設定をinit.elからcustom.elに移動させる。
;; https://qiita.com/javacommons/items/87bebffc4183a48cf070
(setq custom-file "~/.emacs.d/custom.el")
(condition-case nil
    (load custom-file)
  (error nil))
profile image
Ted
大学でコンセンサスアルゴリズムを研究。卒業後ベンチャー企業に入社してフルスタックでWebサービスを開発。現在は大手IT企業に転職し、プログラミングを行っている。AIにプログラマーの仕事を奪って欲しいと願っている。