18
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EmacsAdvent Calendar 2023

Day 17

私が使う最小設定(2023年)

Last updated at Posted at 2023-12-30

はじめに

今回は、最小設定群(2023年)を紹介します。

常にこれを使っているわけではなく、私がたまにログインして、ファイルの内容確認を主な目的として Emacsを起動し、後はかるーく編集する時に使うための最小設定群です。

空の init.el からサーバ上の Emacs を使い始めて、操作中に あ"あ"! となった事象を解消した設定群です。あ"あ"! と思った項目に対応する設定は、基本的に、普段使いの設定群からコピペしています。

この最小設定群でも、意外と乗り切れますね。ポイントは、

  1. カーソル移動系の設定
  2. 画面内に表示されて欲しいと期待する情報を制御するための設定

は最低限必要ってことですかね。

init-min.el

外部パッケージは、markdown-modeだけ取り込んでいます。それ以外はビルトインパッケージを使い、以下ではview-mode, org-mode, dired-modeに対する設定を加えています。

基本設定

;; 余計なファイルを生成させない
(setq make-backup-files nil)
(setq auto-save-default nil)
(setq auto-save-list-file-prefix nil)

;; 長いファイルを開く場合でも行番号を常に表示
(setq line-number-display-limit-width 100000)

;; C-x C-c で閉じる時に、ワンクッション置く
(setq confirm-kill-emacs 'y-or-n-p)

;; 手に馴染んでしまったキーバインド群を設定
(global-set-key (kbd "RET") 'electric-newline-and-maybe-indent)
(global-set-key (kbd "C-M-t") 'beginning-of-buffer)  ;; M-<
(global-set-key (kbd "C-M-b") 'end-of-buffer) ;; M->
(global-set-key (kbd "C-M-p") (lambda () (interactive) (other-window -1)))
(global-set-key (kbd "C-M-n") (lambda () (interactive) (other-window 1)))
(global-set-key (kbd "C-;") 'comment-dwim) ;; M-; is the default
(global-set-key (kbd "M-=") 'count-words)
(global-set-key (kbd "M-]") 'bs-cycle-next)
(global-set-key (kbd "M-[") 'bs-cycle-previous)
(global-set-key (kbd "C-c g") 'goto-line)

;; ホーム的に瞬時にscratchバッファを表示するための関数
(defun my-open-scratch ()
  "Switch the current buffer to \*scratch\* buffer."
  (interactive)
  (switch-to-buffer "*scratch*"))
(global-set-key (kbd "C-M-s") #'my-open-scratch)

markdown-mode

インストール先は、${HOME}/.emacs.dにしています。(他のパッケージも)必要になれば、同様にインストール先フォルダで git でパッケージを取り寄せて、'load-pathにパスを入れてあげればOKです。

;; markdown-mode
;; cd ${HOME}/.emacs.d
;; git clone --depth 1 https://github.com/jrblevin/markdown-mode.git

;; インストール先をパスに追加
(add-to-list 'load-path "~/.emacs.d/markdown-mode")
;; markdown-mode が有効になる時にパッケージを読み込む
(autoload 'markdown-mode "markdown-mode" nil t)
;; *.md なファイルを開く時に、markdown-mode を有効化する
(push '("\\.md$" . markdown-mode) auto-mode-alist)

view-mode

たまにしか使わないサーバ上では不用意にファイルを変更したくないので、普段の操作性を担保しつつ、読み込み専用モードでファイルを開きます。

;; view-mode
;; ファイルを開く時に、view-modeを有効化する(モード有効中は書き込み禁止)
(add-hook 'find-file-hook #'view-mode)
(with-eval-after-load "view"
  ;; 自分の感覚に合うようにキーバインドを変更
  (define-key view-mode-map (kbd "i") 'View-exit-and-edit)
  (define-key view-mode-map (kbd "<SPC>") 'ignore)
  (define-key view-mode-map (kbd "<DEL>") 'ignore)
  (define-key view-mode-map (kbd "f") 'forward-char)
  (define-key view-mode-map (kbd "b") 'backward-char)
  (define-key view-mode-map (kbd "n") 'my-org-view-next-heading)
  (define-key view-mode-map (kbd "p") 'my-org-view-previous-heading)
  (define-key view-mode-map (kbd "<tab>") 'my-view-tab)
  (define-key view-mode-map (kbd "S-<tab>") 'my-view-shifttab)

  ;; org-mode との衝突を回避
  (defun my-org-view-next-heading ()
    (interactive)
    (if (and (derived-mode-p 'org-mode)
             (org-at-heading-p))
        (org-next-visible-heading 1)
      (next-line)))
  (defun my-org-view-previous-heading ()
    (interactive)
    (if (and (derived-mode-p 'org-mode)
             (org-at-heading-p))
        (org-previous-visible-heading 1)
      (previous-line)))
  (defun my-view-tab ()
    (interactive)
    (when (and (derived-mode-p 'org-mode)
               (or (org-at-heading-p)
                   (org-at-property-drawer-p)))
      (let ((view-mode nil))
        (org-cycle))))
  (defun my-view-shifttab ()
    (interactive)
    (when (derived-mode-p 'org-mode)
      (let ((view-mode nil))
        (org-shifttab)))))

org-mode

読むだけで編集しないなら、下記の設定でも十分いけそうです。ガチにしたいときは、こちらを参照。

(with-eval-after-load "org"
  ;; font lock を有効化
  (add-hook 'org-mode-hook #'turn-on-font-lock)
  ;; ツリーを展開する時に、展開されているドロアを自動で閉じる
  (add-hook 'org-tab-first-hook 'my-org-hide-drawers)
  ;; 長い行を改行する
  (setq org-startup-truncated nil)
  ;; 見出しを表す*の冗長な部分を非表示にする
  (setq org-hide-leading-stars t)

  ;; ドロアを閉じる
  (defun my-org-hide-drawers ()
    "Hide all drawers in an org tree."
    (interactive)
    (save-excursion
      (beginning-of-line)
      (unless (looking-at-p org-drawer-regexp)
        (org-cycle-hide-drawers 'subtree)))))

dired-mode

これも操作性を維持するための設定を加えています。

(with-eval-after-load "dired"
  ;; u押下で上のディレクトリに移動
  (define-key dired-mode-map (kbd "u") 'dired-up-directory)
  ;; 手に馴染んだキーバインドで上書き
  (define-key dired-mode-map
              (kbd "C-M-p") (lambda () (interactive) (other-window -1)))
  (define-key dired-mode-map
              (kbd "C-M-n") (lambda () (interactive) (other-window 1)))
  ;; ファイルサイズを読みやすくする
  (setq dired-listing-switches "-lha"))

まとめ

使用頻度が高まれば、さらに設定を追加する気もしますが、ほぼデフォルト設定でも、実はちゃんと使えるんだなと感じますね。

なお、シェルでは alias e="emacs -nw" を設定して、e押下でいつでもEmacsを呼べるようにしています。

Enjoy!

18
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?