読者です 読者をやめる 読者になる 読者になる

理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

EmacsのNeoTreeが非常に使いやすい件

2015年のEmacs - たけぞう瀕死ブログを読んで neotree 知ったんだけど、neotree めっちゃ良かった。

neotree って何

まぁまずはこれを見てくれや。

上のキャプチャで分かるように、neotree は Emacs 上でディレクトリツリーを表示させる elisp になります。この手のタイプの拡張には、Emacs 標準の dired がありますが、neotree は dired とは異なり、

  • 基本的にはウィンドウ上で常駐(常時表示)する思想
  • 表示機能がメイン

となっていて、dired や dired+ ほど豊富なファイル操作機能は持っていません。ぼくとしてはこのくらいシンプルな方が分かりやすいので好きですね。

インストール

Cask を使っているのであれば、Cask に

(depends-on "neotree")

を追加した後、コマンドラインで

$ cask

を実行するだけです。

デフォルトのキーバインドとしては、

(global-set-key [f8] 'neotree-toggle)

を追加しておけば良いでしょう。これにより、F8 キーを押すことでディレクトリ表示用のバッファが左端に表示されるようになります。

設定

neotree.el を読んでみて、便利そうだなと思った設定は以下の通りです。それぞれ、後で簡単に紹介していきます。

;; 隠しファイルをデフォルトで表示
(setq neo-show-hidden-files t)

;; neotree でファイルを新規作成した後、自動的にファイルを開く
(setq neo-create-file-auto-open t)

;; delete-other-window で neotree ウィンドウを消さない
(setq neo-persist-show t)

;; キーバインドをシンプルにする
(setq neo-keymap-style 'concise)

;; neotree ウィンドウを表示する毎に current file のあるディレクトリを表示する
(setq neo-smart-open t)

;; たぶんまだ動かない https://github.com/jaypei/emacs-neotree/issues/105
(setq neo-vc-integration '(face char))

;; popwin との共存
(when neo-persist-show
  (add-hook 'popwin:before-popup-hook
            (lambda () (setq neo-persist-show nil)))
  (add-hook 'popwin:after-popup-hook
            (lambda () (setq neo-persist-show t))))
neo-show-hidden-files

NeoTree はデフォルトで隠しファイルを表示しませんが、隠しファイル表示派はこの変数を non-nil にしておくことでデフォルトで隠しファイルが表示されるようになります。
なお、隠しファイルとして判断される正規表現は neo-hidden-regexp-list を参照してください。

neo-create-file-auto-open

NeoTree は、そのバッファ上でファイルやディレクトリを作成することができます。
この変数を non-nil にしておくことで、ファイル作成時、そのファイルのバッファを自動的に開くようになります。
(non-nil の場合、ファイルが作成されるのみです)

neo-keymap-style

キーバインディングを変更することができます。'default と 'concise のどちらかを設定できます。
NeoTree では、基本的に 1 文字のキーバインディングが定義されているのですが、'default の場合、ファイル操作(作成/削除/ファイル名変更/コピー)がなぜか C-c を Prefix として定義されます。
これを 'concise にすることで、1 文字のキーバインドになります。具体的にはこんな感じになります。他のバインディングは 'concise, 'default に関わらず共通です。

  • C: ルートディレクトリの変更
  • c, +, p: ファイル作成
  • d: ファイル削除
  • r: ファイル名変更
  • e: ディレクトリを開く

neo-smart-open

non-nil に設定することで、NeoTree のウィンドウを開き直す度に、カレントファイルのディレクトリをルートとして表示しなおしてくれます。

neo-vc-integration

VC と共存し、VC のステータスによって表示の face 等を変更してくれるみたいなのですが、まだうまく動かないみたいですね。