by shigemk2

当面は技術的なことしか書かない

.zshファイルをsh-modeで開くこと

とっても基本的なことではあるのだが。

stackoverflow.com

;; zshell
(add-to-list 'auto-mode-alist '("\\.zsh\\'" . sh-mode))

あまりにも基本的にすぎるので、もう少しだけ読んでいくことにする。sh-modeのelispをななめ読みしてみると、

Public Git Hosting - emacs.git/blob - lisp/progmodes/sh-script.el

なんとなく、1667行目のここ。ここで、バッファのファイル名でsh-modeを起動しようとしているかを判定してるっぽいけど、zshがないみたい。なので、↑のように書かないと.zshファイルが読み込まれないっぽい寸法だ。

(sh-set-shell
 (cond ((save-excursion
          (goto-char (point-min))
          (looking-at "#![ \t]?\\([^ \t\n]*/bin/env[ \t]\\)?\\([^ \t\n]+\\)"))
        (match-string 2))
       ((not buffer-file-name) sh-shell-file)
       ;; Checks that use `buffer-file-name' follow.
       ((string-match "\\.m?spec\\'" buffer-file-name) "rpm")
       ((string-match "[.]sh\\>"     buffer-file-name) "sh")
       ((string-match "[.]bash\\>"   buffer-file-name) "bash")
       ((string-match "[.]ksh\\>"    buffer-file-name) "ksh")
       ((string-match "[.]t?csh\\(rc\\)?\\>" buffer-file-name) "csh")
       ((equal (file-name-nondirectory buffer-file-name) ".profile") "sh")
       (t sh-shell-file))
 nil nil)