Hiromuブログ

最近はこちら(https://zenn.dev/hiromu)が本体

Emacsの設定ファイルinit.elを公開してみる

 

Emacsを触りだしたら設定ファイルがかなりの量になってきたのでメモがてらアップ。

ファイル名:~/.emacs.d/init.el

 

見た目についてはこちらのサイトに掲載されていたものが気に入ったのでほぼそのままです。 あとは「Emacs実践入門」の本の内容をかなり盛り込みました。

 

その他、気になる部分を少し自分でカスタマイズという感じの内容です。

大規模な開発をする場合はタグなども導入した方がよさそうかなと思いながらも現状はそこまでは手を出していません。

 

;----------------------------------------------------------------------
;;;文字コードの設定

;; 言語を日本語にする (set-language-environment 'Japanese) ;; UTF-8とする (prefer-coding-system 'utf-8)

;;; Macで日本語のファイル名を扱う場合の設定 (when (eq system-type 'darwin) (require 'ucs-normalize) (set-file-name-coding-system 'utf-8-hfs) (setq locale-coding-system 'utf-8-hfs))

;---------------------------------------------------------------------- ;;;パスの設定

;;~/.emacs.dディレクトリ配下をロードパスに追加する ;; load-path を追加する関数を定義 (defun add-to-load-path (&rest paths) (let (path) (dolist (path paths paths) (let ((default-directory (expand-file-name (concat user-emacs-directory path)))) (add-to-list 'load-path default-directory) (if (fboundp 'normal-top-level-add-subdirs-to-load-path) (normal-top-level-add-subdirs-to-load-path)))))) ;; 引数のディレクトリとそのサブディレクトリをload-pathに追加 (add-to-load-path "elisp" "conf" "public_repos")

;---------------------------------------------------------------------- ;;; 表示関連の設定

(setq inhibit-startup-message t) ; 起動時の画面なし (setq frame-title-format "%f") ; タイトルバーにフルパス表示 (tool-bar-mode -1) ; メニューバーを隠す (global-linum-mode t) ; 行番号を常に表示する (setq-default tab-width 4); TABの表示幅を4に設定 (setq-default indent-tabs-mode nil); インデントにタブ文字を使用しない (column-number-mode t) ; カラム番号を表示 (size-indication-mode t) ; ファイルサイズを表示 ;(display-time-mode 1) ; 時計表示 (display-battery-mode 1) ; バッテリー表示

(if window-system (progn ;; 文字の色を設定します。 (add-to-list 'default-frame-alist '(foreground-color . "white")) ;; 背景色を設定します。 (add-to-list 'default-frame-alist '(background-color . "navy")) ;; カーソルの色を設定します。 (add-to-list 'default-frame-alist '(cursor-color . "yellow")) ;; マウスポインタの色を設定します。 (add-to-list 'default-frame-alist '(mouse-color . "SlateBlue2")) ;; モードラインの文字の色を設定します。 (set-face-foreground 'modeline "black") ;; モードラインの背景色を設定します。 (set-face-background 'modeline "orange") ;; 選択中のリージョンの色を設定します。 (set-face-background 'region "deeppink1") ;; モードライン(アクティブでないバッファ)の文字色を設定します。 (set-face-foreground 'mode-line-inactive "gray30") ;; モードライン(アクティブでないバッファ)の背景色を設定します。 (set-face-background 'mode-line-inactive "gray85") ))

;; デフォルトの透明度を設定する (85%) (add-to-list 'default-frame-alist '(alpha . 85))

;; カレントウィンドウの透明度を変更する (85%) ;; (set-frame-parameter nil 'alpha 0.85) (set-frame-parameter nil 'alpha 85)

;;起動時のディスプレイサイズ変更(環境に応じて適宜変更) (set-frame-height (next-frame) 37) (set-frame-width (next-frame) 80)

(require 'time-stamp) (add-hook 'before-save-hook 'time-stamp) (setq time-stamp-active t) (setq time-stamp-start "last updated : ") (setq time-stamp-format "%04y/%02m/%02d/%02H/%02M/%02S/%u") (setq time-stamp-end " \|$") (setq compilation-window-height 5)

;---------------------------------------------------------------------- ;;; フォントの設定

(set-face-attribute 'default nil :family "monaco" :height 150) (set-fontset-font (frame-parameter nil 'font) 'japanese-jisx0208 '("Hiragino Kaku Gothic ProN" . "iso10646-1")) (set-fontset-font (frame-parameter nil 'font) 'japanese-jisx0212 '("Hiragino Kaku Gothic ProN" . "iso10646-1")) (set-fontset-font (frame-parameter nil 'font) 'mule-unicode-0100-24ff '("monaco" . "iso10646-1")) (setq face-font-rescale-alist '(("^-apple-hiragino." . 1.2) (".osaka-bold." . 1.2) (".osaka-medium." . 1.2) (".courier-bold-.-mac-roman" . 1.0) (".monaco cy-bold-.-mac-cyrillic" . 0.9) (".monaco-bold-.*-mac-roman" . 0.9) ("-cdac$" . 1.3)))

;---------------------------------------------------------------------- ;;; キーバインドの設定

(when (eq system-type 'darwin) ; もし、システムが Mac のとき ;; control と command を入れ替え (setq mac-control-modifier 'command) (setq mac-command-modifier 'control) (setq mac-pass-control-to-system t)) ; コントロールキーを Mac ではなく Emacs に渡す

(define-key global-map (kbd "C-;") 'anything) ;anything

(global-set-key "\C-z" 'undo) ;undo (global-set-key (kbd "C-m") 'newline-and-indent) ;改行+インデント (global-set-key (kbd "C-c l") 'toggle-truncate-lines) ;行の折り返し ; (global-set-key (kbd "C-t") 'other-window) ;ウィンドウの切り替え

; コピーとカットを利用しやすいようにキー入れ替え入れ替え (global-set-key (kbd "C-w") 'kill-ring-save) ;コピー (global-set-key (kbd "C-q") 'kill-region) ;カット (global-set-key (kbd "M-w") 'quoted-insert) ;元C-qの機能

;(global-set-key (kbd "C-x a") 'mark-whole-buffer) ;全て選択

(global-set-key (kbd "C-c C-a") 'beginning-of-buffer) ;バッファの先頭に移動 (global-set-key (kbd "C-c C-e") 'end-of-buffer) ;バッファの最後に移動

; C-hをバックスペース/C-?をヘルプにする (keyboard-translate ?\C-h ?\C-?) (global-set-key (kbd "C-?") 'help-command)

;---------------------------------------------------------------------- ;;;バックアップ・オートセーブファイルの設定

;; バックアップファイルを作成しない ;; (setq make-backup-files nil)

;; オートセーブファイルを作成しない ;; (setq auto-save-default nil)

;; バックアップとオートセーブファイルを~/.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)))

;---------------------------------------------------------------------- ;;; Elisp

;; auto-installの設定 ;; ;; インストール方法 ;; curl -O http://www.emacswiki.org/emacs/download/auto-install.el (when (require 'auto-install nil t) ;; インストールディレクトリの設定 (setq auto-install-directory "~/.emacs.d/elisp/") ;; EmacsWikiに登録されているelispの名前を取得する (auto-install-update-emacswiki-package-name t) ;; 必要であればプロキシの設定を行う ;; (setq url-proxy-services '(("http" . "localhost:8339"))) ;; install-elispの関数を利用可能にする (auto-install-compatibility-setup))

;; redo+の設定 ;; ;; インストール方法 ;; M-x install-elisp RET ;; http://www.emacswiki.org/emacs/download/redo+.el RET ;; C-c C-c (when (require 'redo+ nil t) ;; C-.にリドゥを割り当てる (global-set-key (kbd "C-.") 'redo))

;; Anythingの設定 ;; ;; インストール方法 ;; M-x auto-install-batch RET anything RET ;; C-c C-c (ファイルの数だけ実行する) (require 'anything-startup) ;; M-yにanything-show-kill-ringを割り当てる (define-key global-map (kbd "M-y") 'anything-show-kill-ring)

;; auto-completeの設定 ;; ;; インストール方法 ;; 最新版ダウンロード:http://cx4a.org/software/auto-complete/index.ja.html ;; M-x load-file RET DOWNLOAD_FILE/etc/install.el (add-to-list 'load-path "~/.emacs.d/elisp/auto-complete/") (require 'auto-complete-config) (add-to-list 'ac-dictionary-directories "~/.emacs.d/elisp/auto-complete//ac-dict") (ac-config-default)

;; color-moccurの設定 ;; ;; インストール方法 ;; M-x auto-install-from-emacswiki RET color-moccur.el RET (when (require 'color-moccur nil t) ;; M-oにoccur-by-moccurを割当 (define-key global-map (kbd "M-o") 'occur-by-moccur) ;; スペース区切りで検索 (setq moccur-split-word t) ;; ディレクトリ検索のとき除外するファイル (add-to-list 'dmoccur-exclusion-mask "\.DS_Store") (add-to-list 'dmoccur-exclusion-mask "^#.+#$") ;; Migemoを利用できる環境であればMigemoを使う (when (and (executable-find "cmigemo") (require 'migemo nil t)) (setq moccur-use-migemo t))) ;; moccur-editのインストール ;; M-x auto-install-from-emacswiki RET moccur-edit.el RET (require 'moccur-edit nil t)

;; wgrepの設定 ;; ;; インストール方法 ;; M-x auto-install-from-emacswiki RET wgrep.el RET (require 'wgrep nil t)

;; undohistの設定 ;; ;; インストール方法 ;; M-x install-elisp RET http://cx4a.org/pub/undohist.el (when (require 'undohist nil t) (undohist-initialize))

;; point-undoの設定 ;; ;; インストール方法 ;; M-x auto-install-from-emacswiki RET point-undo.el RET (when (require 'point-undo nil t) (define-key global-map (kbd "M-[") 'point-undo) (define-key global-map (kbd "M-]") 'point-redo))

;; package.elの設定 (Emacs24版のElScreenのインストールにmelpaが必要?のため) (when (require 'package nil t) ;; パッケージリポジトリにMarmaladeと開発者運営のELPAを追加 (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) (add-to-list 'package-archives '("ELPA" . "http://tromey.com/elpa/")) ;; インストールしたパッケージにロードパスを通して読み込む (package-initialize)) ;; melpa.el (require 'melpa)

;; ElScreenの設定 ;; [参考]http://d.hatena.ne.jp/sky-y/20120830/1346333199 ;; インストール方法 ;; M-x package-install RET ElScreen RET ;; APEL非依存版 (Emacs 24の場合) (when (>= emacs-major-version 24) (elscreen-start)) ;; ElScreenのプレフィックスキーを変更する ;;(setq elscreen-prefix-key (kbd "C-t"))

;; undo-treeの設定 ;; ;; インストール方法 ;; M-x package-install RET undo-tree RET (when (require 'undo-tree nil t) (global-undo-tree-mode))

;; howmの設定 ;; ;; 最新版のダウンロード:http://howm.sourceforge.jp/ ;; ./configure --with-lispdir=$HOME/.emacs.d/elisp --with-docdir=$HOME/.emacs.d/share/howm --with-extdir=$HOME/.emacs.d/bin ;; make EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs ;; make install ;; mkdir ~/.emacs.d/howm ;; ;; howmメモ保存の場所 (setq howm-directory (concat user-emacs-directory "howm")) ;;howm-menuの言語を日本語に (setq howm-menu-lang 'ja) ;;howmメモを1日1ファイルにする ; (setq howm-file-name-format "%Y/%m/%Y-%m-%d.howm") ;;howm-modeを読み込む (when (require 'howm-mode nil t) ;; C-c,,でhowm-menuを起動 (define-key global-map (kbd "C-c ,,") 'howm-menu))

;; cua-mode(矩形編集)の設定 (cua-mode t) (setq cua-enable-cua-keys nil)

;---------------------------------------------------------------------- ;;;モードの設定

;; php-modeの設定 ;; ;; インストール方法 ;; M-x install-elisp RET https://raw.github.com/ejmr/php-mode/master/php-mode.el (when (require 'php-mode nil t) (add-to-list 'auto-mode-alist '("\.ctp\'" . php-mode)) (setq php-search-url "http://jp.php.net/ja/") (setq php-manual-url "http://jp.php.net/manual/ja/")) ;;インデントの設定 (defun php-indent-hook() (setq indent-tabs-mode nil) (setq c-basic-offset 2) ;;(c-set-offset 'case-label '+) ; switch文のcaseラベル (c-set-offset 'arglist-intro '+) ; 配列の最初の要素が改行した場合 (c-set-offset 'arglist-close 0)) ; 配列の閉じ括弧 (add-hook 'php-mode-hook 'php-indent-hook)

;; php補完入力 ;; インストール方法 ;; $ cd ~/emacs.d/public_repos ;; $ git clone git://github.com/imakado/php-completion.git (defun php-completion-hook() (when (require 'php-completion nil t) (php-completion-mode t) (define-key php-mode-map (kbd "C-o") 'phpcmp-complete) (when (require 'auto-complete nil t) (make-variable-buffer-local 'ac-sources) (add-to-list 'ac-sources 'ac-source-php-completion) (auto-complete-mode t)))) (add-hook 'php-mode-hook 'php-completion-hook)

;; perl-modeの設定 ;; perl-modeをcperl-modeのエイリアスにする (defalias 'perl-mode 'cperl-mode)

;; perl補完入力 ;; インストール方法 ;; $ cd ~/emacs.d/public_repos ;; $ git clone git://github.com/imakado/perl-completion.git (defun perl-completion-hook() (when (require 'perl-completion nil t) (perl-completion-mode t) (when (require 'auto-complete nil t) (auto-complete-mode t) (make-variable-buffer-local 'ac-sources) (setq ac-sources '(ac-source-perl-completion)))))

(add-hook 'cperl-mode-hook 'perl-completion-hook)

;---------------------------------------------------------------------- ;;; Flymakeの設定

;; HTML用Flymakeの設定 (defun flymake-html-init () (list "tidy" (list (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)))) (add-to-list 'flymake-allowed-file-name-masks '("\.html\'" flymake-html-init))

;; tidy error pattern (add-to-list 'flymake-err-line-patterns '("line \([0-9]+\) column \([0-9]+\) - \(Warning\|Error\): \(.*\)" nil 1 2 4))

;; Javascript用Flymakeの設定 ;; ;; 文法チェッカJavaScript Lint(jsl)のインストール方法 ;; curl -O http://www.javascriptlint.com/download/jsl-0.3.0-mac.tar.gz ;; tar xvf jsl-0.3.0-mac.tar.gz ;; sudo cp ./jsl-0.3.0-mac/jsl /usr/bin/jsl

;; JS用Flymakeの初期化関数の定義 (defun flymake-jsl-init () (list "jsl" (list "-process" (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace))))

;; JavaScript編集でFlymakeを起動する (add-to-list 'flymake-allowed-file-name-masks '("\.js\'" flymake-jsl-init)) (add-to-list 'flymake-err-line-patterns '("^\(.+\)(\([0-9]+\)): \(.warning\|SyntaxError\): \(.\)" 1 2 nil 4))

;; Ruby用Flymakeの設定 (defun flymake-ruby-init () (list "ruby" (list "-c" (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)))) (add-to-list 'flymake-allowed-file-name-masks '("\.rb\'" flymake-ruby-init)) (add-to-list 'flymake-err-line-patterns '("\(.\):(\([0-9]+\)): \(.\)" 1 2 nil 3))

;---------------------------------------------------------------------- ;;;その他の設定

;; リージョン内の行数と文字数をモードラインに表示 ;; http://d.hatena.ne.jp/sonota88/20110224/1298557375 (defun count-lines-and-chars () (if mark-active (format "%d lines,%d chars " (count-lines (region-beginning) (region-end)) (- (region-end) (region-beginning))) ;;(count-lines-region (region-beginning) (region-end)) ;; これだとエコーエリアがチラつく ""))

(add-to-list 'default-mode-line-format '(:eval (count-lines-and-chars)))

;; 対応する括弧をハイライト ;; paren-mode:対応する括弧を強調して表示する (setq show-paren-delay 0) ;表示までの秒数。初期値は0.125 (show-paren-mode t) ;;parenのスタイル:expressionは括弧内も強調表示 (setq show-paren-style 'expression) ;; フェイスを変更する (set-face-background 'show-paren-match-face nil) (set-face-underline-p 'show-paren-match-face "yellow")

;; カーソル位置にあるElisp関数や変数情報をエコーエリアへ表示 ;; emacs-lisp-mode-hook用の関数を定義 (defun elisp-mode-hooks () "lisp-mode-hooks" (when (require 'eldoc nil t) (setq eldoc-idle-delay 0.2) (setq eldoc-echo-area-use-multiline-p t) (turn-on-eldoc-mode))) ;; emacs-lisp-modeのフックをセット (add-hook 'emacs-lisp-mode-hook 'elisp-mode-hooks)

;; タブ, 全角スペース, 行末空白表示 ;; http://triplepulu.blogspot.jp/2013/03/emacs_2752.html 参照 (defface my-face-b-1 '((t (:background "NavajoWhite4"))) nil) ; 全角スペース (defface my-face-b-2 '((t (:background "gray10"))) nil) ; タブ (defface my-face-u-1 '((t (:background "SteelBlue" :underline t))) nil) ; 行末空白 (defvar my-face-b-1 'my-face-b-1) (defvar my-face-b-2 'my-face-b-2) (defvar my-face-u-1 'my-face-u-1)

(defadvice font-lock-mode (before my-font-lock-mode ()) (font-lock-add-keywords major-mode '(("\t" 0 my-face-b-2 append) (" " 0 my-face-b-1 append) ("[ \t]+$" 0 my-face-u-1 append) ))) (ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode) (ad-activate 'font-lock-mode)

;;end