目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回

高速なカーソル移動は、エディタを使う上で重要なポイントになります。上下左右以外の移動手段を無意識に使えるようになることが、高速化のコツだと思います。

「emacs 雑記」の motion に触発されて書いてみましたが、かなりパクリになってしまいました。🙏

上下左右

それぞれ、Ctrl-p, Ctrl-n, Ctrl-b, Ctrl-f に割り当てられています。

十字キーでも移動できますが、こちらの方がホームポジションからの距離が短いので効率が良いはずです。

以下のように前置き引数を付けると、「何文字だけ移動」とか「何行だけ移動」とか出来ます。

キー 説明
Ctrl-u Ctrl-f 4 文字右に移動
Ctrl-u Ctrl-u Ctrl-n 16 行下に移動
Ctrl-u 7 Ctrl-b 7 文字左に移動

前の単語、次の単語

それぞれ、Meta-b, Meta-f に割り当てられています。

英文だと正確に単語単位で移動しますが、日本語だと単語の区切りがおおざっぱです。ただ、通常の左右移動の高速版と考えると、かなり使えます。

私はそれぞれ、Ctrl-,Ctrl-. に割り当て直しました。

行頭、行末

行頭は Ctrl-aHome に、行末は Ctrl-eEnd に割り当てられています。どちらもかかせません。

スクロールアップ、スクロールダウン

スクロールアップは Ctrl-vPageDown に、スクロールダウンは Meta-vPageUp に割り当てられています。

一行だけスクロールしたい場合は、Ctrl-u 1 Ctrl-vCtrl-u 1 Meta-v のように前置き引数を付けます。もしくは、以下相当のものをキーに割り当てます。

(scroll-up 1)
(scroll-down 1)

私はそれぞれ Ctrl-; (一行スクロールアップ) と Ctrl-: (一行スクロールダウン) に割り当てました。

ウィンドウの上、中央、下

ウィンドウの中央には Meta-r すると、移動できます。

前置き引数を付けると、ウィンドウの上や下にも移動できます。それぞれ、Ctrl-u 0 Meta-rCtrl-u -1 Meta-r です。もしくは、以下相当のものをキーに割り当てます。

(move-to-window-line 0)
(move-to-window-line -1)

私はそれぞれ、Ctrl-q Ctrl-p (上)、Ctrl-q Ctrl-l (中央)、Ctrl-q Ctrl-n (下) に割り当てました。

バッファの先頭、終端

それぞれ、Meta-<, Meta-> に 割り当てられています。

実行するとマークセットしてしまうので、私は、以下相当のものをキーに割り当て直しました。

(goto-char (point-min))
(goto-char (point-max))

検索

Emacs の検索はインクリメンタルサーチなので、移動手段としても重宝します。

Ctrl-s で前方検索、Ctrl-r で後方検索が出来ます。それぞれ Ctrl-u を付けて実行すると、正規表現検索が出来ます。

検索中に Meta-e すると、非インクリメンタルな検索が出来ます。

Migemo 検索

🔗 Migemo: ローマ字のまま日本語をインクリメンタル検索

ローマ字のまま日本語をインクリメンタル検索するためのツールです。変換なしで日本語を検索出来るため、高速な移動手段となり得ます。

現在行の空白でない最初の文字まで移動

Meta-m に割り当てられています。

これは、行頭の空白を飛ばして最初に文字がくる部分に飛ぶ、というコマンドです。

あらゆるプログラムではインデントして字下げをしますが、字下げされたところに行きたいときに使用します。かなり必須です。

行番号を指定した移動

キーには割り当てられていません。M-x goto-line を実行します。

目的の行番号が分かっている時は、この方法で移動します。

対括弧移動

対になっている括弧の一方から他方に飛ぶ移動です。

“(” や “{” から、")" や “}” への移動は Ctrl-Meta-n 、その逆は Ctrl-Meta-p です。文字列中の括弧を無視してくれる優れものです。

私はそれぞれ、Ctrl-q Ctrl-fCtrl-q Ctrl-b に割り当て直しました。

マークセットした場所に移動

Ctrl-x Ctrl-x すると、Ctrl-space 等でマークセットした場所にカーソルを飛ばすことが出来ます。もう一度 Ctrl-x Ctrl-x すると、元の場所に戻ります。

カーソル移動からは脱線しますが、M-x transient-mark-mode すると、リージョンに色が付きます。さらに Emacs22 の場合は Ctrl-space を 2 回打つと、このモードになります。

前の関数、次の関数 (C or C++)

標準では用意されていないようですが、個人的に関数を自作し、Ctrl-c Ctrl-[, Ctrl-c Ctrl-] に割り当てました。いつか紹介できるかもしれません。

grep 関連

キーには割り当てられていません。M-x grep を実行します。

ヒットした候補は、Ctrl-x ` で順番にジャンプできます。もちろん、*grep* バッファ上で Enter してもジャンプできます。Emacs22 以降であれば、np で次の候補を別ウィンドウに開けます。

似た機能に以下のものがあります。

関数 説明
M-x occur 現在のバッファを検索します。
M-x grep-find find と grep を使って検索します。

タグジャンプ

ある程度の規模のソース群を探索する場合に便利です。キー操作は以下のとおりです。

キー 関数 説明
Meta-. M-x find-tag シンボルの定義部分に飛ぶ。
Meta-* M-x pop-tag-mark 前の状態に飛ぶ。
なし M-x tags-search シンボルを検索させる。
Meta-, M-x tags-loop-continue 次の候補に飛ぶ。(検索状態で実行)
Ctrl-x 4 . M-x find-tag-other-window 定義部分を別ウィンドウに表示。
Ctrl-x 5 . M-x find-tag-other-frame 定義部分を別フレームに表示。
Meta-TAB M-x complete-symbol シンボル名の補完(TAGS を読み込んだ状態で)
なし M-x visit-tags-table タブテーブルを読み込み直す。

第4回終わり。

目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回