Emacsの門を10数年ぶりに叩いた
故あって、仕事で使うメインエディタをVSCodeからEmacsに変えた。
定義ファイル
使っていたのは15年以上前な気がする。
当時はinit-loaderで分割してた気がする。昔書いた記事
今は、No分割がメジャーらしい。
ということで、定番のここを見て、init.elのベースをコピー。
(2020年代も半分過ぎたか、、、)
今回設定した内容を列挙
結構昔に設定してたやつがある。。。。(人は変わらない)
C-hでbackspace
いつの時代も最初に設定するやつ
(global-set-key "\C-h" 'delete-backward-char)
メニューバーを表示させない
Terminalで使うので上のメニューバーは使わないので非表示に
(menu-bar-mode -1)
モードラインに列番号(何文字目か)を表示
今気づいたけど0スタートなのは、まぁプログラマ的な?
(column-number-mode 1)
スクロールする際の行数を1に
(setq scroll-conservatively 1)
昔は以下だったけど、有効なのかな?
(setq scroll-step 1)
C-x p でバッファを逆に移動
C-x oの逆
(global-set-key "\C-xp" (lambda ()
(interactive)
(other-windows -1)))
Emacs内のPATHの設定
shell側のPATHとEmacs内のPATHを合わせる
元ネタはここです
(dolist (dir (list
"/sbin"
"/usr/sbin"
"/bin"
"/usr/bin"
"/opt/local/bin"
"/sw/bin"
"/usr/local/bin"
"/usr/texbin"
(expand-file-name "~/bin")
(expand-file-name "~/.emacs.d/bin")
))
(when (and (file-exists-p dir) (not (member dir exec-path)))
(setenv "PATH" (concat dir ":" (getenv "PATH")))
(setq exec-path (append (list dir) exec-path))))
上記書かなくても exec-path-from-shell パッケージいれるだけでOK
行番号
以外に面倒だったのは行番号表示。
vtermで、行番号を表示するとEnter押すたびに%(改行)が表示されてうっとおしいので、vtermでは無効にした。
;; 指定したモードで行番号を表示する
(dolist (mode '(
prog-mode-hook ;;全てのプログラムモード
text-mode-hook)) ;; テキストモード
(add-hook mode (lambda () (display-line-numbers-mode))))
;; 指定されたモードの行番号表示を無効にする
(dolist (mode '(
vterm-mode-hook)) ;; vtermは変に改行が表示されるので
(add-hook mode (lambda () (display-line-numbers-mode -1))))
全部で表示していいなら (global-display-line-numbers-mode 1) を書けばOK
括弧の補完
(electric-pair-mode t)
現在行の強調表示
こっちも行番号と同じく、、、
;; 指定したモードで行番号を表示する
(dolist (mode '(
prog-mode-hook ;;全てのプログラムモード
text-mode-hook)) ;; テキストモード
(add-hook mode (lambda () (hl-line-mode))))
;; 指定されたモードの行番号表示を無効にする
(dolist (mode '(
vterm-mode-hook)) ;; vtermは変に改行が表示されるので
(add-hook mode (lambda () (hl-line-mode -1))))
パッケージ
使ってるパッケージ
パッケージは leaf-convert-insert-template を使って最初に定義。
ほとんどデフォルトだけど、一部カスタマイズ
- paren
- files
- バックアップファイルが作成されるのを解消するために。ここをまんま使ってる
- ivy
- company
indent-bars
インデントごとに縦線をいれてくれるやつ

基本leafでいれたままhookだけ
:hook
prog-mode-hook yaml-mode-hook
なんでかhookが動かぬ。。
ターミナル
vtermを選択。過去はmulti-termを使っていたらしいが。。
一部思い通りにならずカスタマイズ
(leaf vterm
:doc "Fully-featured terminal emulator"
:req "emacs-25.1"
:tag "terminals" "emacs ≥ 25.1"
:url "https://github.com/akermu/emacs-libvterm"
:added "2025-07-27"
:emacs 25.1
:ensure t
:custom
(vterm-max-scrollback. 10000)
(vterm-buffer-name-string "vterm: %s")
(vterm-keymap-exceptions
. '("<f1>" "<f2>" "C-c" "C-x" "C-u" "C-g" "C-1" "M-x" "M-o" "C-v" "M-v" "C-у" "M-y"))
:config
;; Workaround of not working counsel-yank-pop
;; https://github.com/akermu/emacs-libvterm#counsel-yank-pop-doesnt-work
(defun my/vterm-counsel-yank-pop-action (orig-fun &rest args)
(if (equal major-mode 'vterm-mode)
(let ((inhibit-read-only t)
(yank-undo-function (lambda (_start_end) (vterm-undo))))
(cl-letf (((symbol-function 'insert-for-yank)
(lambda (str) (vterm-send-string str t))))
(apply orig-fun args)))
(apply orig-fun args)))
(advice-add 'counsel-yank-pop-action : around #'my/vterm-counsel-yank-pop-action))
テーマ
Lupan's themesを使用。
lupan-material-darkを使ってます。
背景が真っ黒だとほかのアプリケーションと区別がつかないので、背景が黒じゃなくて見やすそうだったので。
パッケージになってないので、手で入れる。
- git cloneしてローカルにもってくる
- 持ってきたディレクトリを
~/.emacs.d/elpa/におく - 以下をinit.elに記述
(leaf lupan-themes
:load-path "~/.emacs.d/elpa/lupan-themes/"
:require 'lupan-themes
:config
(load-theme 'lupan-material-dark t))
なんか最初出来なくて、なんでか有効になった。。。
理由はよくわかってない、、、
キーバインド
MetaキーのESCはちょっと遠いということで、C-[をMetaキーにする。
Emacsでのやりかたは試したけど無理なので、ターミナル(ghostty)側で実現
keybind = ctrl+[=esc:
Discussion