まえがき
Emacs という古代の遺産みたいなエディタがあります。 めっちゃカスタマイズできるのが特徴で、 Emacs は エディタではなく環境だ、とか言われたりしてます。 使いこなしている人はあらゆる言語のコーディングを Emacs の中で行い、 テストも Emacs の中で行い、ドキュメントも Emacs で書き、 さらにはブラウジングや Twitter への投稿も Emacs の中で行うそうです。 …私はそこまでではありません。
同期から見せて欲しいと 去年の10月ごろに言われてたのをふと思い出しました。 折角なので現在使っている設定ファイルをここに公開します。
よく分からない人も、とりあえず Emacs をインストールしてみて、
以下の設定ファイルを置いてみてください。
ごめんなさい、ごちゃごちゃと設定しすぎてて
Emacs 使ったことない人がいきなり動かすのはかなり面倒です。
時間の無駄です。やめてください。
下記設定ファイルの動作環境
特にないと思ってたのですが、実際にゼロから構築してみたら意外とありました。
- Emacs 24.4 以上
- 動作に必要な Emacs のパッケージ (package.el からインストールしておいてください)
- helm
- migemo
- shell-pop
- open-junk-file
- [Macの場合]
- フォント Ricty が入っていること
- cmigemo が入っていること (homebrew からインストールできます)
- [Windowsの場合]
- フォント Meiryo_Ke* 系が入っていること
- フォント Inconsolata が入っていること
- cmigemo.exe にパスが通っており、C:/cmigemo/dict/utf-8/migemo-dict に辞書ファイルが置かれていること
- Windows でも Mac でも Linux でも動く(多分)
- コンソールでも GUI でも動く(多分)
設定ファイル
ファイル構成
[Mac や Linuxの場合]
~/.emacs
├── init.el
├── common.el
└── x11.el
[Windows の場合]
[Emacsのディレクトリ]\bin\.emacs
├── init.el
├── common.el
└── x11.el
設定ファイル
[init.el]
(cond ((equal window-system nil)
(load "~/.emacs.d/common.el"))
((equal system-type 'gnu/linux)
(load "~/.emacs.d/x11.el")
(load "~/.emacs.d/common.el"))
((equal system-type 'windows-nt)
(load "~/.emacs.d/x11.el")
(set-face-attribute 'default nil :family "Inconsolata" :height 135)
(set-fontset-font nil 'japanese-jisx0208 '("MeiryoKe_Gothic" . "iso10646-1"))
(set-fontset-font nil 'japanese-jisx0212 '("MeiryoKe_Gothic" . "iso10646-1"))
(setq migemo-dictionary "C:/cmigemo/dict/utf-8/migemo-dict")
(setq migemo-command "cmigemo")
(load "~/.emacs.d/common.el"))
((equal system-type 'darwin)
(load "~/.emacs.d/x11.el")
(set-frame-font "Ricty 16")
(setq migemo-dictionary "/usr/local/share/migemo/utf-8/migemo-dict")
(setq migemo-command "/usr/local/bin/cmigemo")
(load "~/.emacs.d/common.el")))
[common.el]
;; default char encoding system as utf-8
(set-default-coding-systems 'utf-8)
;; enable 'package' and add package repositories
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)
; region coloer enable
(global-font-lock-mode t)
;; C-c c to compile
;; C-c n to next-error
(define-key mode-specific-map "c" 'compile)
(define-key mode-specific-map "n" 'next-error)
;; C-c n to find file
(define-key mode-specific-map "n" 'find-name-dired)
;; C-c g to goto line
(define-key mode-specific-map "g" 'goto-line)
;; do not show startup-message
(setq inhibit-startup-message t)
;; C-k to remove all of the line
(setq kill-whole-line t)
;; C-h to type "backspace" key
(keyboard-translate ?\C-h ?\C-?)
;; do not make backup file (name starts with "#")
(setq make-backup-files nil)
(setq auto-save-default nil)
;;BEEP disable
(setq ring-bell-function 'ignore)
;; scroll each line
(setq vertical-centering-font-regexp ".*")
(setq scroll-conservatively 35)
(setq scroll-margin 0)
(setq scroll-step 1)
;; set tab width 4
(setq-default tab-width 4)
(setq default-tab-width 4)
;; display corresponding parens
(show-paren-mode 1)
;;quickly key stroke
(setq echo-keystroke 0.1)
;; yes-no -> y-n
(defalias 'yes-or-no-p 'y-or-n-p)
;; show current time in the mode line
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(setq display-time-string-forms '(24-hours ":" minutes))
(display-time-mode t)
;; always enable region color
(setq transient-mark-mode t)
;; delete old back up files automatically
(setq delete-old-versions t)
;; open *.emacs files as elisp-mode
(setq auto-mode-alist (cons '("\\.emacs" . emacs-lisp-mode) auto-mode-alist))
;; show functions name where the cursor is
(which-function-mode 1)
;; do not distingish letter case
(setq completion-ignore-case t)
(setq read-file-name-completion-ignore-case t)
(setq read-buffer-completion-ignore-case t)
;; display batery status
(require 'battery)
(display-battery-mode t)
;; enter fullscreen mode with "Alt+RET"
(global-set-key (kbd "M-RET") 'toggle-frame-fullscreen)
;; indenting switch
(c-set-offset 'case-label '+)
(require 'helm-config)
(helm-mode 1)
(define-key global-map (kbd "M-x") 'helm-M-x)
(define-key global-map (kbd "C-x C-r") 'helm-recentf)
(define-key global-map (kbd "C-c f") 'helm-recentf)
(define-key global-map (kbd "M-y") 'helm-show-kill-ring)
(define-key global-map (kbd "C-c i") 'helm-imenu)
(define-key global-map (kbd "C-x b") 'helm-buffers-list)
(define-key global-map (kbd "M-r") 'helm-resume)
(define-key global-map (kbd "C-M-h") 'helm-apropos)
(define-key helm-map (kbd "C-h") 'delete-backward-char)
(define-key helm-find-files-map (kbd "C-h") 'delete-backward-char)
(define-key helm-find-files-map (kbd "TAB") 'helm-execute-persistent-action)
(define-key helm-read-file-map (kbd "TAB") 'helm-execute-persistent-action)
; enable migemo wher package is installed
(when (require 'migemo nil t)
(setq migemo-options '("-q" "--emacs"))
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-coding-system 'utf-8-unix)
(load-library "migemo")
(migemo-init))
;; enable dired-alternate-file
(put 'dired-find-alternate-file 'disabled nil)
;; wdired
(require 'wdired)
(define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)
;; open the file in another buffer, but directory
(defun dired-open-in-accordance-with-situation ()
(interactive)
(let ((file (dired-get-filename)))
(if (file-directory-p file)
(dired-find-alternate-file)
(dired-find-file))))
;; use dired-find-alternate-file
(define-key dired-mode-map (kbd "RET") 'dired-open-in-accordance-with-situation)
(define-key dired-mode-map (kbd "a") 'dired-find-file)
;; web-mode
(require 'web-mode)
(add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
(add-to-list 'auto-mode-alist '("\\.php?\\'" . web-mode))
; auto-complete
(require 'auto-complete-config)
(ac-config-default)
; global auto-complete
(global-auto-complete-mode t)
;; shell pop
(require 'shell-pop)
(custom-set-variables
'(shell-pop-shell-type (quote ("ansi-term" "*ansi-term*" (lambda nil (ansi-term shell-pop-term-shell)))))
'(shell-pop-term-shell "/bin/bash")
; '(shell-pop-universal-key "C-t")
'(shell-pop-window-height 60)
'(shell-pop-window-position "bottom"))
;; C-c t to use terminal
(define-key mode-specific-map "t" 'shell-pop)
;; move to trash instead of remove
(setq delete-by-moving-to-trash t)
;; byte-complie automatically
(require 'auto-async-byte-compile)
(setq auto-async-byte-compile-exclude-files-regexp "~/tmp/")
(add-hook 'emacs-lisp-mode-hook 'enable-auto-async-byte-compile-mode)
;; open-junk-file
(require 'open-junk-file)
(define-key mode-specific-map "o" 'open-junk-file)
; add newline to bottom of file
(setq require-final-newline t)
; do not add newline with "C-n"
(setq next-line-add-newlines nil)
(setq c-mode-hook
'(lambda ()
(c-set-style "java")))
[x11.el]
;; 余計な物を表示しない
(tool-bar-mode -1)
(scroll-bar-mode -1)
(menu-bar-mode -1)
;; マウスホイール有効
(mouse-wheel-mode t)
(setq mouse-sheel-follow-mouse t)
(setq mouse-wheel-progressive-speed nil)
;; クリップボード共有
(setq x-select-enable-clipboard t)
;; カーソルの設定
(set-cursor-color "blue")
(setq blink-cursor-interval 0.7)
(setq blink-cursor-delay 1.0)
(blink-cursor-mode 1)
;; 全角スペースなどを可視化
(defface my-face-b-1 '((t (:background "medium aquamarine"))) nil)
(defface my-face-u-1 '((t (:foreground "SteelBlue" :underline t))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-u-1 'my-face-u-1)
(defadvice font-lock-mode (before my-font-lock-mode ())
(font-lock-add-keywords
major-mode
'(
("¡¡" 0 my-face-b-1 append)
("[ ]+$" 0 my-face-u-1 append)
)))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
(add-hook 'find-file-hooks
'(lambda ()
(if font-lock-mode nil
(font-lock-mode t))) t)
;; ダークテーマを適用
(load-theme 'wombat t)
;; helm-find-file の色がダークテーマと相性が悪いので変更
(custom-set-faces
'(helm-buffer-file ((t (:inherit font-lock-builtin-face :foreground "ivory"))))
'(helm-ff-directory ((t (:background "LightGray" :foreground "ivory"))))
'(helm-ff-file ((t (:inherit font-lock-builtin-face :foreground "ivory")))))
;; YaTeX モード
(add-to-list 'load-path "~/.emacs.d/yatex")
(setq auto-mode-alist
(cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))
(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)
(setq YaTeX-inhibit-prefix-letter t)
; disable auto paren close
(setq YaTeX-close-paren-always 'never)
; set template file
(setq YaTeX-template-file "~/.emacs.d/yatex/template.tex")
;; 以下、YaTeX モードで自動的に句読点をカンマ・ピリオドに変換する処理
;;選択範囲内の全角英数字を半角英数字に変換
(defun hankaku-eisuu-region (start end)
(interactive "r")
(while (string-match
"[0-9A-Za-z]+"
(buffer-substring start end))
(save-excursion
(japanese-hankaku-region
(+ start (match-beginning 0))
(+ start (match-end 0))
))))
;;バッファ全体の全角英数字を半角英数字に変換
(defun hankaku-eisuu-buffer ()
(interactive)
(hankaku-eisuu-region (point-min) (point-max)))
;;YaTeXモードの時にのみ動作させる用に条件分岐
(defun replace-commaperiod-before-save-if-needed ()
(when (memq major-mode
'(yatex-mode))
(replace-commaperiod-buffer)(hankaku-eisuu-buffer)))
;;保存前フックに追加
(add-hook 'before-save-hook 'replace-commaperiod-before-save-if-needed)
江藤 光
まだまだ気持ちは新人です。