目次

目次

【Emacs】init.el 晒す

アバター画像
江藤 光
アバター画像
江藤 光
最終更新日2017/03/21 投稿日2017/03/21

まえがき

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)

アバター画像

江藤 光

まだまだ気持ちは新人です。

目次