better-defaults 20170613.2104(in MELPA)
Fixing weird quirks and poor defaults

概要

Emacsは歴史がある分、古めかしい設定に固執している点があります。

ベテランはその挙動に慣れているから困らないだろうけど、
新参者にとっては使いづらいです。

そこで、 better-defaults.el は、よりよいデフォルト値を提供します。

本記事では変更点すべてを日本語で解説します!

  • あいまいマッチの ido-mode が有効になる
  • メニューバーツールバースクロールバー を非表示にする
  • ファイルを閉じたとき、Emacs終了時に位置を保存する
  • M-/ をより高度な M-x hippie-expand に置き換える
  • C-x C-bを M-x ibuffer に置き換えてすぐに選択できるようにする
  • M-zを M-x zap-up-to-char に置き換えて対象文字を削除しないようにする
  • isearch は正規表現検索をデフォルトにする
  • 対応する括弧を表示する
  • タブのインデントをしない
  • クリップボード・PRIMARYでコピー&ペーストできるようにする
  • apropos.el で多くのシンボルを見付けるようにする
  • マウスのヤンクは現在位置に
  • ファイル保存時にファイル末尾に改行を入れる
  • ベルを鳴らさないようにする
  • ediff でフレームを使わない
  • バックアップファイル は ~/.emacs.d/backups/ 以下に作成

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてbetter-defaultsを使う方は
以下のコマンドを実行します。

M-x package-install better-defaults

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name better-defaults

インストールすると、 (package-initialize)
の時点で有効になるので、説明を読んで理解してください。

もちろん、一部だけをかいつまんで設定してもよいです。

特に Migemo を使っている人は戸惑うかもしれません。

内容

これがすべてです。

(progn
  ;;; ido-mode
  ;; C-x C-fやC-x bでファイルやバッファを開くとき
  ;; 部分文字列を指定してC-s/C-rで選択できるようにする
  (ido-mode t)
  ;; あいまいマッチ
  ;; 候補に "alpha", "beta", "gamma", "delta" があるときに
  ;; "aa" → "alpha", "gamma"
  ;; "ea" → "beta", "delta".
  ;; つまり文字を飛び超えられる!
  (setq ido-enable-flex-matching t)

  ;;; メニューバー・ツールバー・スクロールバーを切る
  (menu-bar-mode -1)
  (when (fboundp 'tool-bar-mode)
    (tool-bar-mode -1))
  (when (fboundp 'scroll-bar-mode)
    (scroll-bar-mode -1))

  ;;; M-z (zap-to-char)の亜種、zap-up-to-charを使えるようにする
  (autoload 'zap-up-to-char "misc"
    "Kill up to, but not including ARGth occurrence of CHAR." t)

  ;;; uniquify.el
  ;; 違うディレクトリで同じファイル名のファイルを開いたときに
  ;; バッファ名にディレクトリも付記するようにする
  ;; Emacs 24.4ではデフォルト
  (require 'uniquify)
  ;; /foo/bar/mumble/name, /baz/quux/mumble/nameというファイルなら
  ;; それぞれ bar/mumble/name, quux/mumble/name というバッファ名に
  ;; ただし、Emacs 24.4デフォルトでは post-forward-angle-brackets
  ;; に設定されるので name<bar/mumble>, name<quux/mumble> になる。
  (setq uniquify-buffer-name-style 'forward)

  ;;; saveplace.el
  ;; ファイルを閉じたとき、次に開くときはその場所(point)から開く
  (require 'saveplace)
  (setq-default save-place t)

  ;;; デフォルトのキーバインドをより高機能なコマンドに置き換える
  ;; dabbrev-expand -> hippie-expand
  ;; dabbrev以外にも様々な展開・補完ができるようになる
  (global-set-key (kbd "M-/") 'hippie-expand)
  ;; list-buffers -> ibuffer
  ;; バッファメニューを高機能なibufferに!
  ;; 何よりバッファメニューがカレントになる!!
  (global-set-key (kbd "C-x C-b") 'ibuffer)
  ;; zap-to-char -> zap-up-to-char
  ;; zap-to-charはその文字までを削除するが
  ;; zap-up-to-charはその文字の直前までを削除する
  ;; その文字も削除したければ直後にC-dを押せばいい
  (global-set-key (kbd "M-z") 'zap-up-to-char)

  ;;; 普通のisearchと正規表現isearchのキーバインドを逆転
  (global-set-key (kbd "C-s") 'isearch-forward-regexp)
  (global-set-key (kbd "C-r") 'isearch-backward-regexp)
  (global-set-key (kbd "C-M-s") 'isearch-forward)
  (global-set-key (kbd "C-M-r") 'isearch-backward)

  ;;; 対応する括弧を表示してくれる
  (show-paren-mode 1)
  ;;; タブでインデントしない
  (setq-default indent-tabs-mode nil)
  (setq
   ;; クリップボードでコピー&ペーストできるようにする
   x-select-enable-clipboard t
   ;; PRIMARY selectionを使う(Windowsでは対象外)
   x-select-enable-primary t
   ;; クリップボードでコピー・カットした文字列を
   ;; キルリングにも保存させる
   save-interprogram-paste-before-kill t
   ;; M-x apropos等でより多くのシンボルを見つけるようにする
   ;; ただし、ちょっと遅くなる
   ;;
   ;; M-x apropos-user-optionはすべての変数を
   ;; M-x apropos-commandはすべての関数を
   ;; M-x apropos-commandはすべてのシンボル(関数、変数、フェイス以外も)
   ;; M-x apropos-valueは属性リストや関数内も
   ;; M-x apropos-documentationはetc/DOC以外のすべての説明文字列も
   apropos-do-all t
   ;; マウスでyankしたとき、クリックした場所ではなくて現在位置を対象に
   mouse-yank-at-point t
   ;; 保存時にファイル末尾に改行を入れる
   require-final-newline t
   ;; エラー時などはベル音ではなくて画面を1回点滅させる
   visible-bell t
   ;; ediff時に新しいフレームを作らない(シンプルになる)
   ediff-window-setup-function 'ediff-setup-windows-plain
   ;; ~/.emacs.d/placesにファイル・位置情報を保存する
   save-place-file (concat user-emacs-directory "places")
   ;; バックアップファイルはカレントディレクトリではなく
   ;; ~/.emacs.d/backups 以下に保存する
   backup-directory-alist `(("." . ,(concat user-emacs-directory
                                            "backups")))))

Migemo使いはisearchをデフォルトに戻す

(global-set-key (kbd "C-M-s") 'isearch-forward-regexp)
(global-set-key (kbd "C-M-r") 'isearch-backward-regexp)
(global-set-key (kbd "C-s") 'isearch-forward)
(global-set-key (kbd "C-r") 'isearch-backward)

text-mode (org-mode 等も含む) で文章を書いているときのみ
デフォルトに戻し、他(コード等)は正規表現isearchをデフォルトに
するときはこのようにしよう。

(define-key text-mode-map (kbd "C-M-s") 'isearch-forward-regexp)
(define-key text-mode-map (kbd "C-M-r") 'isearch-backward-regexp)
(define-key text-mode-map (kbd "C-s") 'isearch-forward)
(define-key text-mode-map (kbd "C-r") 'isearch-backward)


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。