Lisp読み書きできないけどEmacs使いたい

僕のEmacsの基本設定紹介します

最近、ちょっと時間ができたのでinit.elを見てたら、自分の基本設定見返す時があったのでブログにまとめる。

ここで言う基本設定って、meplaとかel-getを使ってサードパーティのライブラリを利用しない純粋にEmacsに搭載されている関数や変数で設定できる機能のことを指す。

あと記事を書くにあたって、googleで「Emacs 基本設定」ってググったら結構様々な人が公開してた。

最後にコード全て載せてあるので、そっち見たい人は下までスクロールして。

日本語言語設定

;; ユーザーの自然言語と文字エンコーディングを設定
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)

コーディングしかしないのに日本語の設定いる?みたいに思ってたけど、org-modeやmarkdownでなんやかんや使うので一応書いている。

メニューバーを隠す

Emacsのターミナル版では下の画像のように、上に白いメニューバーが表示されているが、ほとんど利用されていないので非表示にする。

f:id:nuy:20200906145049j:plain

;; メニューバーを消す
(menu-bar-mode -1)

f:id:nuy:20200906145058j:plain

折り返し文字の非表示

ターミナルでEmacs使っていると長いテキストはこんな感じで折り返しの時は\が行末に表示されて、折り返さない時は$が表示される。これが邪魔なので設定で削除する。

f:id:nuy:20200906145429j:plain

f:id:nuy:20200906145439j:plain

;; 文字が画面から飛び出る時にでる$マークを表示させない。
;; https://stackoverflow.com/questions/8370778/remove-glyph-at-end-of-truncated-lines
(set-display-table-slot standard-display-table 0 ?\ )

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

なお、init.elbyte-compile-fileする時は作られたelcでエラーが発生してしまうのでその時はコメントアウトしてあげて。

行の折り返しの切り替え

エディタ上で一行が長いときに、テキスト折り返す、折り返さないを交互に変更できる。

;; 行の画面外の折り返しを切り替えるショートカット
(define-key global-map (kbd "M-l") 'toggle-truncate-lines)

選択範囲一括コメントアウト、コメントイン

範囲を選択して一括でコメントアウトしたい時に利用する。既にコメントアウトされているところではコメントインしてくれる。コード書く時にめちゃ便利。

f:id:nuy:20200906144208j:plain

;; 選択範囲を全てコメントアウト、コメントインする
(define-key global-map (kbd "C-c /") 'comment-or-uncomment-region)

バッファの再読み込み

Emacsでファイルを編集していても、gitや他のエディタでファイルを更新し、Emacsで読み込んでいるファイル情報が古くなる場合がある。

そんな時に、最新の状態に更新するのがバッファのリロード機能である。

;; バッファの再読み込みをM-rで実行する
(defun revert-buffer-no-confirm (&optional force-reverting)
  (interactive "P")
  (if (or force-reverting (not (buffer-modified-p)))
      (revert-buffer :ignore-auto :noconfirm)
    (error "The buffer has been modified")))
(global-set-key "\M-r" 'revert-buffer-no-confirm)

行番号の表示

モードラインにカーソルがいる場所の行数を表示する。左が行数で、右がその行の先頭から何文字目にいるかを表示している。

f:id:nuy:20200906144221j:plain

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

ファイルサイズを表示

同じく、モードラインに開いているファイルのサイズを表示する。

f:id:nuy:20200906144235j:plain

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

対応する括弧のハイライト

コードの括弧に対応する箇所を自動でハイライトしてくれる。コーダーなら必須の設定。 カーソルを置いた時に、デフォルトだと0.125秒の遅延があるので0に設定。

画像だと赤くなっているのがそれ。

f:id:nuy:20200906144247j:plain

;; カーソルを括弧に合わせると範囲を表示する
(show-paren-mode t)
;; 範囲表示の遅延を0秒にする
(setq show-paren-delay 0)

インデントの設定

今はほぼいないけどコードのインデントにタブを使っている人がいたりする。これをタブじゃなくてスペースにする設定。indent-tabs-modeをオフにし、インデントの深さをスペース2つにする。

ここら辺は好みもあるけど、タブ使うのはやめた方が良いと思うよ。スペースの個数に関してはpython見てるとjupyterとかデフォルトで4だし、ありなんかなぁ〜。

f:id:nuy:20200906144300j:plain

;; インデントをタブにするモードをof
(setq-default indent-tabs-mode nil)

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

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

Emacsでファイルを編集していると同じ場所にファイル名+~なバックアップファイルが作られる。邪魔以外の何物でもないのだけど、何かあった時のためにバックアップファイルは欲しいのでそれを~/.emacs.d/baskupsに集める。

;; オートセーブファイルを~/.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)))

全体のコード

最後にここで紹介した設定全て載せておく。

;; ユーザーの自然言語と文字エンコーディングを設定
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8)

;; メニューバーを消す
(menu-bar-mode -1)

;; 文字が画面から飛び出る時にでる$マークを表示させない。
;; https://stackoverflow.com/questions/8370778/remove-glyph-at-end-of-truncated-lines
(set-display-table-slot standard-display-table 0 ?\ )

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

;; 行の画面外の折り返しを切り替えるショートカット
(define-key global-map (kbd "M-l") 'toggle-truncate-lines)

;; 選択範囲を全てコメントアウト、コメントインする
(define-key global-map (kbd "C-c /") 'comment-or-uncomment-region)

;; ページアップのキーにctrl+]を追加
(define-key global-map (kbd "C-]") 'scroll-down)

;; バッファの再読み込みをM-rで実行する
(defun revert-buffer-no-confirm (&optional force-reverting)
  (interactive "P")
  (if (or force-reverting (not (buffer-modified-p)))
      (revert-buffer :ignore-auto :noconfirm)
    (error "The buffer has been modified")))
(global-set-key "\M-r" 'revert-buffer-no-confirm)

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

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

;; カーソルを括弧に合わせると範囲を表示する
(show-paren-mode t)
;; 範囲表示の遅延を0秒にする
(setq show-paren-delay 0)

;; インデントをタブにするモードをof
(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)))