【簡単】Emacs基本的な設定ファイルの書き方【init.el】

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。タクマ™ [@suwaru_blog] です。

Emacs をインストールしたものの、設定ファイルがよくわからない…
なんかエラーがでる! (もしくはエラーすら出てこない!)

その気持ち、すごくわかります。
エディターの設定なんかよりも、本当は早く開発に取り掛かりたいはずです。

今回は Emacs 設定ファイル ~/.emacs.d/init.el をイジるときの心構えと、
僕が普段つかっている設定を公開します! (コピペで OK )

Emacs はカスタマイズしてこそ威力を発揮する

Emacs 自体は拡張性が非常に高いエディターですが、
裏を返すと、デフォルト設定の使い勝手はよくありません。

最初は設定にこだわりすぎない方がいい

設定ファイルの記述方法はクセがあり、慣れないと文法エラーをたくさん起こします。
初心者は「最初から完璧な設定ファイルを目指さない方がいい」と思います。

初心者おすすめの Emacs 設定手順

  1. ネット上に公開されている他人の設定をコピペして試す
  2. 挙動が気に入らなくても「ちゃんと動いてるからいいか」ぐらいの気持ちでいること
  3. Emacs の操作に慣れてきた頃から少しずつ設定をイジってみる

Emacs Lisp について

設定ファイルやパッケージは Emacs Lisp という独自言語で書かれています。
説明したとおり「文法なんて覚えず、最初は誰かの設定をコピペするだけ」で OK です。

個人的 init.el 設定

お待ちかねの Emacs 設定方法です。

  • ホームディレクトリに .emacs.d という隠しフォルダがなければ作成してください
  • .emacs.d の中に init.el というファイルがなければ作成してください

それでは init.el に以下の設定を貼り付けてみてください。

~/.emacs.d/init.el
;;
;; パッケージ読み込み
;;

(require 'package)

;; HTTP
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t)
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
(add-to-list 'package-archives '("ELPA" . "http://tromey.com/elpa/") t)

(package-initialize)

;; フォントを Ricty Diminished (変更したい場合)
;; (add-to-list 'default-frame-alist '(font . "Ricty Diminished-14"))

;; フォントの行間を指定 (変更したい場合)
;; (setq-default line-spacing 0.2)

;;
;; Mac OS のクリップボードと同期する
;;

(defun copy-from-osx ()
 (shell-command-to-string "pbpaste"))

(defun paste-to-osx (text &optional push)
 (let ((process-connection-type nil))
     (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
       (process-send-string proc text)
       (process-send-eof proc))))

(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)

;; 時間も表示
(display-time)

;; emacs テーマ選択
(load-theme 'manoj-dark t)

;; "yes or no" の選択を "y or n" にする
(fset 'yes-or-no-p 'y-or-n-p)

;; alpha
(if window-system
    (progn
      (set-frame-parameter nil 'alpha 95)))

;; font
(add-to-list 'default-frame-alist '(font . "ricty-12"))

;; line number の表示
(require 'linum)
(global-linum-mode 1)

;; line number を分かりやすくする
(set-face-attribute 'linum nil
            :foreground "#a9a9a9"
            :background "#404040"
            :height 0.9)

;; メニューバーを非表示
(menu-bar-mode 0)

;; 現在ポイントがある関数名をモードラインに表示
(which-function-mode 1)

;; 対応する括弧をハイライト
(show-paren-mode 1)

;; リージョンのハイライト
(transient-mark-mode 1)

;; current directory 表示
(let ((ls (member 'mode-line-buffer-identification
                  mode-line-format)))
  (setcdr ls
    (cons '(:eval (concat " ("
            (abbreviate-file-name default-directory)
            ")"))
          (cdr ls))))

;; ターミナルで起動したときにメニューを表示しない
(if (eq window-system 'x)
    (menu-bar-mode 1) (menu-bar-mode 0))
(menu-bar-mode nil)

;; buffer の最後でカーソルを動かそうとしても音をならなくする
(defun next-line (arg)
  (interactive "p")
  (condition-case nil
      (line-move arg)
    (end-of-buffer)))

;; active window move
(global-set-key (kbd "<c-left>")  'windmove-left)
(global-set-key (kbd "<c-down>")  'windmove-down)
(global-set-key (kbd "<c-up>")    'windmove-up)
(global-set-key (kbd "<c-right>") 'windmove-right)

;; rgrep の header message を消去
(defun delete-grep-header ()
  (save-excursion
    (with-current-buffer grep-last-buffer
      (goto-line 5)
      (narrow-to-region (point) (point-max)))))
(defadvice grep (after delete-grep-header activate) (delete-grep-header))
(defadvice rgrep (after delete-grep-header activate) (delete-grep-header))

;; "grep バッファに切り替える"
(defun my-switch-grep-buffer()
  (interactive)
    (if (get-buffer "*grep*")
            (pop-to-buffer "*grep*")
      (message "No grep buffer")))
(global-set-key (kbd "s-e") 'my-switch-grep-buffer)

;; 履歴参照
(defmacro with-suppressed-message (&rest body)
  "Suppress new messages temporarily in the echo area and the `*Messages*' buffer while BODY is evaluated."
  (declare (indent 0))
  (let ((message-log-max nil))
    `(with-temp-message (or (current-message) "") ,@body)))

;; Terminal 化
(setq shell-pop-shell-type '("eshell" "*eshell*" (lambda () (eshell))))
(global-set-key (kbd "C-c o") 'shell-pop)

;;
;; setq
;;

;; ⌘  キーを super として割り当てる
(setq mac-command-modifier 'super)

;; クリップボードへのコピー
(setq x-select-enable-clipboard t)

;; C-k で行全体を削除する
(setq kill-whole-line t)

;; スタートアップメッセージを表示させない
(setq inhibit-startup-message t)

;; エラー音をならなくする
(setq ring-bell-function 'ignore)

;; *.~  バックアップファイルを作らない
(setq make-backup-files nil)

;; .#*  バックアップファイルを作らない
(setq auto-save-default nil)

;; tabサイズ
(setq default-tab-width 4)

;; タイトルにフルパス表示
(setq frame-title-format "%f")

;; スタートアップメッセージを表示させない
(setq inhibit-startup-message 1)

;; scratch の初期メッセージ消去
(setq initial-scratch-message "")

;; スクロールは 1 行ごと
(setq mouse-wheel-scroll-amount '(1 ((shift) . 5)))

;; スクロールの加速をやめる
(setq mouse-wheel-progressive-speed nil)

;; 大文字・小文字を区別しない
(setq case-fold-search t)

;; rgrep 時などに新規に window を立ち上げる
(setq special-display-buffer-names '("*Help*" "*compilation*" "*interpretation*" "*grep*" ))

;;
;; define-key
;;

;; Contol H で 1 文字削除
;; (define-key global-map "\C-h" 'delete-backward-char)

;; 上記定義では Mini Buffer 内では削除できない可能性があるので以下を再定義
(keyboard-translate ?\C-h ?\C-?)
(global-set-key "\C-h" nil)

;; ヘルプの表示を M-? 変更
(define-key global-map "\M-?" 'help-for-help)

;; ファイル名検索
(define-key global-map [(super i)] 'find-name-dired)

;; ファイル内検索
(define-key global-map [(super f)] 'rgrep)

;;
;; put
;;

;; リージョンの大文字小文字変換
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil)
あくまで一例なので、要らないと思った設定は削除したり ; でコメントアウトしてください。

init.el が読み込まれていないとき

Emacs の設定ファイルはいくつかありますが、基本的に ~/.emacs.d/init.el だけで十分です。

  • ~.emacs
  • ~/.emacs.el

上記、他の設定ファイルと干渉していないか確認してみてください。これらは削除して OK です。

パッケージインストールについて

Emacs のパッケージインストール機能を使うと、更に init.el 内で機能拡張の設定ができます。
パッケージの使い方について、以下の記事で解説しています。

関連記事

Emacs ロードマップ

Emacs 操作方法

コメント

コメントを残す

*