Let's use bookmarks
Table of Contents
Last modified: 20240720T1459+0900
emacsでは、FILEメニューやフォルダから選択しなくても、一瞬で目的のファイルを開くことができます。日常的によく使うファイルやディレクトリは、ブックマークに登録しておきましょう。
1. 基本
最低限、以下のコマンドを意識すれば使えます。
| C-x r m | カーソル位置をブックマークする |
| C-x r b | 設定されたブックマークにジャンプ |
emacsで何かのファイルを編集している状態で C-x r m とすると、ミニバッファに Set bookmark named (default: ...) : という表示が出るので、そのままリターンを押します。次に、そのバッファを閉じて別のファイルを編集しているとき、 C-x r b とすると、ミニバッファの中に設定済のブックマークが現れます。その中に、今指定した … という名前のブックマークがあるので、そこにカーソルを移動してリターンを押すと、先ほどブックマークしたファイルが開き、そのときのカーソル位置まで移動します。
C-x r が、ブックマーク(レジスター)関連のキーですが、忘れたときは、 M-x bookmark とコマンドを打ち込むと、関連するコマンドが出てきますので、そちらから操作するのでもOKです。
| M-x bookmark-set | カーソル位置をブックマークする |
| M-x bookmark-jump | 設定されたブックマークにジャンプ |
2. 応用:ブックマークメニューの操作
| C-x r l | ブックマークメニューを表示 |
ブックマークを管理するためには、ブックマークメニューを用います。ブックマークメニューを開くコマンドは、 C-x r l です。機能が多く混乱するかもしれないので、使用頻度(あくまで私の場合)を参考に書いておきます。
| キー | 機能 | 使用頻度 |
|---|---|---|
| m | v で表示するブックマークをマークする(複数可) |
|
| M | リストのすべてのブックマークを v で表示するようにマークする |
|
| v | m や M で選択されたブックマークを、新しいウインドウを開いて表示する |
|
| マークしていない場合には、カーソルがあるブックマーク先を開く | ||
| t | ファイル名表示のON/OFFを切り替える | |
| 1 | 一つのフレーム全体に、ブックマーク先を表示する | |
| 2 | 一つのウインドウにブックマーク先を表示し、もう一つのウインドウに | |
| その前に表示していたブックマーク先を表示する | ||
| RET | ブックマークメニューを閉じて、ブックマーク先を開く | A |
| o | ブックマーク先を、別ウインドウで開き、そこにカーソルを移動 | B |
| (ブックマークメニューはそのまま表示されている) | ||
| C-o | o と同じだが、カーソルは移動させない |
B |
| 5 | ブックマーク先を、別のフレームで開く | A |
| r | ブックマーク先を変更せず、ブックマーク名だけを変更する | B |
| R | ブックマーク名を変更せず、ブックマーク先だけを変更する | B |
| d | カーソル位置のブックマークに削除マークを付けて一つ下に移動する | A |
| C-d | カーソル位置のブックマークに削除マークを付けて一つ上に移動する | |
| D | リストされているすべてのブックマークに削除マークを付ける | |
| x | 削除を実行する | A |
| s | 現在のブックマークリストを、デフォルトのブックマークファイルに保存 | C |
| C-u s | 現在のブックマークリストを、ファイル名を指定して、保存する | C |
| l | ファイル名を指定して、ブックマークを読み込む | C |
| u | 現在の行のあらゆるマークを削除 | |
| DEL | 前の行のあらゆるマークを削除 | |
| U | リスト全体のすべてのマークを削除 | |
| a | メモを表示 (ブックマークへのメモ (annotation)を参照) | B |
| A | すべてのメモを、別ウインドウに表示 | |
| e | カーソルがあるブックマークにメモを書く | B |
| / | ブックマークの検索(incremental)を実行 | |
| g | 表示をリフレッシュする |
3. 使いやすくするコツ
3.1. 保存のタイミング
標準では、ブックマークは、emacsを終了したときに、 ~/.emacs.d/bookmarks というファイルに保存されます。言い換えると、emacsを終了しないかぎり、設定したブックマークは保存されません。めったにemacsを終了させたりしない人は、設定したと思っているブックマークが再利用できないので、戸惑うかもしれません。その場合には、ブックマークを設定するたびに、ファイルに書き出して保存するように設定しましょう。
(setq bookmark-save-flag 1)
bookmark-save-flag には、以下のような値を設定して、ブックマークのファイルへの書き出しをコントロールします。後述のように、ブックマークファイルを作業毎に切り替えて使いたい場合には、 nil がいいでしょう。
| t | emacsが終了したときに保存する |
| nil | M-x bookmark-save コマンドが実行されたときだけ保存する |
| n (数字) | ブックマークがn回設定されたら保存する |
上の例では、1を設定しているので、ブックマークが一つでも設定されたら直ちに保存します。
3.2. ブックマークファイルの場所
標準では、 ~/.emacs.d/bookmarks に保存されますが、Dropboxなどのクラウドを使っている場合には、クラウドに置く方が便利です。このファイルの場所は、 bookmark-default-file という変数で管理されています。
(setq bookmark-default-file "~/Dropbox/dotfile/bookmarks")
この例だと、Dropbox上の、 dotfileというディレクトリの中にブックマークファイルが保存されますので、環境が変わっても、同じブックマークを使えます。
3.3. ブックマークファイルの切り替え
または、作業毎に、異なるブックマークのリストを使いたい場合があるかもしれません。その場合には、先ほどの、ブックマークメニューから、 C-u s でブックマークを任意の名前で書き出したり、 l で任意のブックマークファイルをロードしたりすることができます。この場合には、ブックマークの変更が勝手にファイルに書き込まれないように、以下の指定を忘れずに行うのが安全です。
(setq bookmark-save-flag nil)
3.4. ブックマークのメモ
それぞれのブックマークには、メモ(annotation)を付けることができます。 bookmark-use-annotations の値が t の場合には、 C-x r m でブックマークを設定したときに、メモを書くウインドウが開きます。これが nil のときは、 C-x r l でリストを表示した状態で、メモを書きたいブックマークにカーソルを置いて、 e を叩くとウインドウが起動します(デフォルト)。
メモがあるブックマークは、 C-x r l で表示されるリストで、冒頭に * マークが付きます。そこで a を押すとメモが表示されます。 A を押すと、ブックマークのすべてのリストが、メモ付きで表示されます。
(setq bookmark-use-annotation t)
何のブックマークかわからないと利用しなくなるので、できるだけメモを付けておきましょう。
3.5. キーバインド
個人の感想ですが、デフォルトのキーバインドは、少し使いにくいと感じます。私はよく使う二つのコマンドについては、以下のようにキーを割り当てています。
| コマンド名 | デフォルト | |
|---|---|---|
| M-m | bookmark-set | C-x r m |
| M-l | bookmark-bmenu-list | C-x r l |
(bind-key "M-m" 'bookmark-set) (bind-key "M-l" 'bookmark-bmenu-list)
3.6. ブックマークの並ぶ順番
また、このような使い方の場合、ブックマークリストのソート順は、新しく変更されたブックマークから順に並ぶのが使いやすいので、次のように設定します。
(setq bookmark-sort-flag 'last-modified)
一日の作業は、とりあえず M-l (エスケープキーと l )を押して、昨日の作業を思い出すことから始まります。
また、気がついたら M-m を押して、作業経過を記録します。
3.7. 大きなファイルの目次として使う
M-m でブックマークを登録するとき、ミニバッファに Set-bookmark-named: というプロンプトが出ます。そのままリターンを押せばブックマークが上書きされますが、何か新しい名前を付けてリターンを押せば、上書きされず、新しいブックマークとして保存されます。同じファイルの中であっても、複数の場所を別々のブックマークとして登録できますので、大きなファイルを編集する場合には、インデックスとしても使えます。
その場合には、とりあえず簡易な名前で、区切りとなる場所を登録しておいて、あとでブックマークメニューから、 r を使ってわかりやすい名前(たとえば、 draft_chapter1 draft_chapter2 など)に変更するといいでしょう。