【Emacs】Mac/Win及びGUI/CUIで初期設定ファイルを兼用する

スポンサーリンク

前記事で、macOSWindowsでのEmacs環境を構築したが、初期設定ファイルを共通にし兼用にする。

設定ファイル

Emacsの設定ファイルは.emacs (dot emacs)と呼ばれ、下記に記述できる。尚、読み込まれるのは一つだけで、優先順位は次のようになっている。

  1. ~/.emacs.el (.emacs.elc)
  2. ~/.emacs
  3. ~/.emacs.d/init.el (init.elc)
  4. ~/.emacs.d/init

上記のうち~/.emacs.d/init.elに記述する。理由は、~/.emacs.d/ディレクトリにEmacsの設定ファイル類を集約でき、このフォルダをGitリポジトリ管理する事で、MacパソコンやWindowsパソコン、更にはLinixで簡単に共有できる。

OSによって切り換える

;; OS によって設定を切り替える例
(when (eq system-type 'windows-nt) ; Windows
    ;; ←Win用設定を、ここに記述
)

(when (eq system-type 'darwin) ; Mac OS X
    ;; ←Mac用設定を、ここに記述
)

CUI, GUIによって切り換える

(if (not window-system) (progn
    ;; ←CUI用設定を、ここに記述
))

(if window-system (progn
    ;; ←GUI用設定を、ここに記述
))

私の設定ファイル(~/.emacs.d/init.el)

;;
;; Emacs共通設定
;;
(set-language-environment 'Japanese)    ; 日本語環境
(set-default-coding-systems 'utf-8-unix)    ; UTF-8 が基本
(set-terminal-coding-system 'utf-8-unix)    ; emacs -nw も文字化けしない
(setq default-file-name-coding-system 'utf-8)
(setq default-process-coding-system '(utf-8 . utf-8))
(prefer-coding-system 'utf-8-unix)

;; splash screenを無効にする
(setq inhibit-splash-screen t)

;; C-hをbackspaceにする
(global-set-key (kbd "C-h") 'delete-backward-char)

;; キーバインド定義
(define-key global-map (kbd "C-z") 'scroll-down-command)
(define-key global-map (kbd "C-c z") 'suspend-frame)
(define-key global-map (kbd "C-c C-SPC") 'kill-ring-save)

;; ロックファイル / バックアップファイルを作成しない
(setq create-lockfiles nil)
(setq make-backup-files nil)
(setq delete-auto-save-files t)

;; 自動保存ファイルを作成しない
(setq auto-save-default nil)

;; テーマを設定する
(load-theme 'manoj-dark t)

;; 対応するカッコを強調表示
(show-paren-mode t)

;; 時間も表示させる。
;;(display-time)

;; 行番号を常に表示させる
(global-linum-mode)
(setq linum-format "%4d ")
(column-number-mode t)               ; 行番号と列番号を表示する

;; コンパイル時に画面スクロールする
(setq compilation-scroll-output t)

;; .grep拡張子はにgrepモードにする
(add-to-list 'auto-mode-alist 
             (cons "\\.grep$" 'grep-mode))

;; yesと入力するのは面倒なのでyで十分
(defalias 'yes-or-no-p 'y-or-n-p)

;; 行頭でC-kを実行した時に1行削除にする
(setq kill-whole-line t)

;;
;; CUI時の設定
;;
(if (not window-system) (progn
  ;; 現在行をアンダーライン
  (setq hl-line-face 'underline)     ; 現在行をアンダーライン
  (global-hl-line-mode)

))

;;
;; GUI時の設定
;;
(if window-system (progn
  ;; 現在行に色をつける
  (global-hl-line-mode t)            ;現在行に色をつける
  (set-face-background 'hl-line "gray20")

  ;; 初期フレームの設定
  (setq initial-frame-alist
          '((width . 86) (height . 45)))

  ;; 新規フレームのデフォルト設定
  (setq default-frame-alist
          '((width . 86) (height . 45)))

))

;;
;; C/C++言語の設定
;;
(defun my-c-mode-common-init ()
  "C, C++ mode set up function"
  (setq tab-width 4)
  ;; <- 追加
  )

(add-hook 'c-mode-hook 'my-c-mode-common-init)
(add-hook 'c++-mode-hook 'my-c-mode-common-init)

;;
;; パッケージ管理(package.el)を有効にする
;;
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/") t)
(package-initialize)

;; 
;; undo-treeの設定
;;
;; undo-tree を読み込む
(require 'undo-tree)

;; undo-tree を起動時に有効にする
(global-undo-tree-mode t)

;; M-/ をredo に設定する。
(global-set-key (kbd "M-/") 'undo-tree-redo)

;;
;; Windows Emacsでの設定
;;
(when (eq system-type 'windows-nt) ; Windows

  ;; markdownビューワの指定
;;  (setq markdown-open-command "c:/Tools/MarkCat-win32-x64/MarkCat")
  (setq markdown-open-command "c:/Tools/markcat.bat")

  ;; (set-language-environment "UTF-8") ;; UTF-8 でも問題ないので適宜コメントアウトしてください
  (setq default-input-method "W32-IME")
  (setq-default w32-ime-mode-line-state-indicator "[--]")
  (setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))
  (w32-ime-initialize)
  ;; 日本語入力時にカーソルの色を変える設定 (色は適宜変えてください)
  (add-hook 'w32-ime-on-hook '(lambda () (set-cursor-color "coral4")))
  (add-hook 'w32-ime-off-hook '(lambda () (set-cursor-color "black")))

  ;; 以下はお好みで設定してください
  ;; 全てバッファ内で日本語入力中に特定のコマンドを実行した際の日本語入力無効化処理です
  ;; もっと良い設定方法がありましたら issue などあげてもらえると助かります

  ;; ミニバッファに移動した際は最初に日本語入力が無効な状態にする
  (add-hook 'minibuffer-setup-hook 'deactivate-input-method)

  ;; isearch に移行した際に日本語入力を無効にする
  (add-hook 'isearch-mode-hook '(lambda ()
           (deactivate-input-method)
           (setq w32-ime-composition-window (minibuffer-window))))
  (add-hook 'isearch-mode-end-hook '(lambda () (setq w32-ime-composition-window nil)))

  ;; helm 使用中に日本語入力を無効にする
  (advice-add 'helm :around '(lambda (orig-fun &rest args)
             (let ((select-window-functions nil)
                (w32-ime-composition-window (minibuffer-window)))
             (deactivate-input-method)
             (apply orig-fun args))))

(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.
 '(display-time-mode t)
 '(show-paren-mode t))
(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.
 '(default ((t (:family #("MS ゴシック" 0 7 (charset cp932-2-byte)) :foundry "outline" :slant normal :weight normal :height 120 :width normal)))))
)

;;
;; macOS Emacsでの設定
;;
(when (eq system-type 'darwin)
  (setq ns-command-modifier (quote meta))

  ;; markdownビューワの指定
;;  (setq markdown-open-command "markcat")
  (setq markdown-open-command "marked2")
)

(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.
 '(display-time-mode t)
 '(package-selected-packages (quote (markdown-mode undo-tree auto-complete)))
 '(show-paren-mode t))

(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.
)

追記(2017/1/8)

設定が増えてくると、設定ファイルの記述も長くなり見通しが悪くなってくる。init-loaderパッケージを使うと、機能・プラットフォーム別にファイル分割して記述できる。後記事で紹介。

参照記事

参考

  1. Emacsの設定ファイルをOSの判定をして共有する方法|system-type
  2. Emacs講座 -第5回- キーバインドの変更 / マスタカの ChangeLog メモ
  3. キーバインディング – 環境設定のための Emacs Lisp 入門 | プログラマーズ雑記帳
  4. Emacs で自動作成されるファイル(バックアップ、自動保存、ロック)の設定 | プログラマーズ雑記帳
  5. Emacs でのタブ幅の設定 | プログラマーズ雑記帳
  6. でらうま倶楽部 : Emacs
  7. Emacs の使い方 (コマンド, 正規表現, 設定)
  8. 正規表現のシンタックス

コメント

タイトルとURLをコピーしました