UP | HOME

Let's use bookmarks

Table of Contents

Last modified: 20240720T1459+0900


14.8 Bookmarks

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 mM で選択されたブックマークを、新しいウインドウを開いて表示する  
  マークしていない場合には、カーソルがあるブックマーク先を開く  
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 など)に変更するといいでしょう。

Date: 2024-06-25 Tue 20:56

Author: Yoshinori Ueeda

Created: 2024-07-20 Sat 14:59

Validate