Emacsを快適に使うファイル周りの設定紹介

こんにちは

毎日元気に Emacs を使って生活しています．

今回は私が使っている Emacs でのファイルの開き方や作成方法などの話を書きます．
基本的な操作ですが，改めて解説することでなにか得られることがあれば幸いです．

## recentf-ext

世の中には 8:2 の法則というものがあります．
私の体感的には全体の 2 割のファイルを開くことに 8 割の時間を使っていてそれ以外のファイルを開くことはめったにありません．
なので最近開いたファイルを見れておくようにしておくのはエディタの使い勝手としては重要です．

最近では recentf-ext から C-s などで検索して該当ファイルかそれに一番近いファイルを開いてから辿って開きたいファイルを開く事がほとんどです．
また recentf-ext なら後述の tramp-mode で開いたファイルも同様に表示されるのも非常にお勧めです．
私は Emacs でファイルを開くときはほぼ間違いなく recentf-ext から探すので起動時に最初に出る画面を recentf-ext にしています．

インストール方法は `M-x package-install` してから `recentf-ext` と入力するだけです．
設定は私は以下のようにしています．

```el:recentf.el
;; 自動保存
(when (require 'recentf-ext nil t)
  (setq recentf-max-saved-items 2000)
  (setq recentf-exclude '(".recentf"))
  (setq recentf-auto-cleanup 10)
  (setq recentf-auto-save-timer (run-with-idle-timer 30 t 'recentf-save-list))
  (recentf-mode 1))

;; 起動画面削除
(setq inhibit-startup-message t)

;; 起動画面で recentf を開く
(add-hook 'after-init-hook (lambda()
    (recentf-open-files)
    ))

;; キーバインド
(global-set-key (kbd "C-x C-r") 'recentf-open-files)
```

ファイルのリストは自動保存をさせてもローカルのファイルを少し書き込むだけなので気になることはまずありえないので是非やりましょう．
またデフォルトの起動画面は私には大した情報量がないので最近開いたファイルの一覧を表示させるようにしています．

またキーバインドは何でも良いのですが，かなり頻繁に打つので打ちやすいコマンドにしておくことをおすすめします．


## tramp

普段の業務で触るものは Linux で動く前提になっているので当然 Linux サーバーにソースコードを置いて ssh して編集する必要があります．
ssh 先で Emacs を立てるという手もありますが，キーバインドに制約があったりしますし，手元のファイルも ssh 先のファイルも等しく扱えると便利です．

そんなときに tramp が非常に便利です．tramp には様々な機能がありますが，私は覚えきれないので私が普段実際に使っている機能だけを紹介します．

tramp はちゃんと `~/.ssh/config` を読んでくれますので考えることはほぼなく，普段通り `C-x C-f` から以下のように入力すれば server-host のホームディレクトリを開くことができます．

    /scp:server-host:~/

これだけでリモートのファイルを手元のファイルと同列に扱うことができるのでリモートにあることを意識する必要がありません．
ファイルの保存ももちろん普段通りのキーバインドで行えます．
また先程紹介した recentf-ext でも扱えるのでカジュアルにリモートのファイルを開くことができます．

tramp は標準で入っていると思うので特に準備はいらずすぐに使いはじめることができます．

そんな便利な tramp ですが，快適に使うには少し工夫をした方がよいのでその工夫を紹介します．

### バックアップファイルをリモートには作らない

Emacs はデフォルトではファイルのバックアップファイルを同一ディレクトリの`ファイル名~`というファイルで保存します．
しかし tramp ではこのバックアップファイルを保存する度に scp する必要があるのでコストが高く定期的に Emacs が固まってしまいます．
これを防ぐためにそもそもバックアップファイルを保存しないという選択もありますが，単純にバックアップファイルの保存をローカルにしてしまえばいいので以下のように設定しています．

```el:backup.el
;; create backup file in ~/.emacs.d/backup
(setq make-backup-files t)
(setq backup-directory-alist
  (cons (cons "\\.*$" (expand-file-name "~/.emacs.d/backup"))
    backup-directory-alist))

;; create auto-save file in ~/.emacs.d/backup
(setq auto-save-file-name-transforms
      `((".*" ,(expand-file-name "~/.emacs.d/backup/") t)))
```

バックアップファイルは `~/.emacs.d/backup` 以下に作るようにしています．
これが必ず良いというわけではないと思いますが，とりあえずデフォルトのバックアップファイルの挙動からは変えておくことがお勧めです．

### zshは使わない

[EmacsWiki: Tramp Mode](http://www.emacswiki.org/TrampMode)

ここにも書かれていますが，zsh を使っている場合に tramp が hang してしまいます．
解決策も書かれていますが．私の環境では症状を軽減させることはできましたが，0 にすることは出来なかったので結局 tramp ではシェルを bash にすることにしました．
tramp モードでシェルの機能を使うことはまずないと思うので問題はないと思います．

```el:tramp.el
(eval-after-load 'tramp '(setenv "SHELL" "/bin/bash"))
```

## open-junk-file

Emacs ではまずファイル名を指定しなければ入力することが出来ません．
しかしちょっとしたメモを取るときなどにいちいち名前を指定するのは面倒です．

そんなときは open-junk-file です．
open-junk-file を使えばファイル名は時間から適当なものを用意してくれるのであとは拡張子を指定するだけでメモやちょっとしたコードを書くことができます．
これを使うと似たようなファイルが大量に出来てしまう問題がありますが，それは作成した時間からある程度推測できるのと参照したいものは recentf-ext で上の方にあることが多いのでなんとかなることが多いです．

またファイル名を適当に編集することも可能なのでファイル名の最後などに内容がわかるものを少し書いた方が後で楽だと思います．

インストールは `M-x package-install` してから `open-junk-file` と入力するだけです．

以下に設定を紹介します．

```el:open-junk-file.el
(require 'open-junk-file)
(setq open-junk-file-format "~/junk/%Y-%m-%d-%H%M%S.")

;; open-junk
(global-set-key (kbd "C-x j") 'open-junk-file)
```

これを設定するだけで Emacs で事実上ファイルを作り放題になるので Emacs を使う率が飛躍的に上がると思います．


## まとめ

最初に 8:2 の法則を紹介しましたが，私はほとんどの人の .emacs も同様だと思っていて普段使う設定は全体の 2 割程度ではないでしょうか．

各言語の設定や便利な elisp の紹介記事は多いですが，このような毎日必ず使う基本的なファイルの操作方法を紹介した記事は少ないのではないでしょうか．

参考になれば幸いです．