0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

よく使うEmacsキーバインドまとめ

0
Posted at

CUI Emacs 入門: macOS から SSH で Ubuntu に接続して使う

目次

  1. はじめに
  2. 起動と終了
  3. ファイル操作
  4. バッファとウィンドウ
  5. カーソル移動
  6. コピー・切り取り・貼り付け
  7. 取り消しと中断
  8. 検索と置換
  9. シェルとの連携
  10. コマンド実行とヘルプ
  11. 最小限の設定 (init.el)
  12. チートシート

0 はじめに

0.1 環境

本記事の環境は次のとおりです。

  • 接続元: macOS(標準的な JIS 配列キーボード)
  • 接続先: Ubuntu(SSH 接続)
  • シェル: bash
  • Emacs: 端末上で動作する CUI モード(-nw オプション)

CUI モードで起動しやすくするため、~/.bashrc に次のエイリアスを追加しています。

alias emacs='emacs -nw'

追加後は source ~/.bashrc を実行するか、シェルを起動し直してください。これにより、次のコマンドで CUI 版の Emacs が起動します。

$ emacs test.txt

-nw は "no window system" の意味で、ウィンドウを開かずに端末内で Emacs を動かすオプションです。

0.2 キーバインドの表記規則

本記事では Emacs の慣例に従い、修飾キーをハイフンでつないで表記します。

表記 意味
C Control キー
M Meta キー(macOS の端末では ESC または Option。)
SPC スペースキー
C-p Control を押しながら p を押す
C-x C-s C-x を入力し、いったん指を離してから C-s を入力する
C-x 2 C-x を入力し、指を離してから 2 を単独で押す
M-x Meta 修飾つきで x を押す
C-SPC Control を押しながらスペースを押す

Emacs では C-xC-c は「プレフィックスキー」と呼ばれ、それ単独では動作せず、後続の入力と組み合わせて 1 つのコマンドになります。

0.3 用語

用語 意味
バッファ 編集対象を保持する Emacs 内部の作業領域。ファイルを開くと、その内容を保持するバッファが作られる。バッファへの変更は保存するまでファイルには反映されない。要は開いている文章ファイルとかのことを指す。
ウィンドウ 画面を分割した各領域。Emacs では「ウィンドウ」は OS のウィンドウではなく、この分割領域を指す。
ミニバッファ 画面最下部の 1 行。ファイル名やコマンド名の入力欄、およびメッセージの表示欄として使われる。

0.4 画面が急に閉じたときの対処

C-z を押すと Emacs はサスペンド(一時停止)し、シェルに戻ります。この場合は端末で次のコマンドを実行すると復帰します。

$ fg

停止中のジョブは jobs で確認できます。


1 起動と終了

$ emacs file.txt   # ファイルを指定して起動
$ emacs            # ファイルを指定せずに起動
キー コマンド 動作
C-x C-c save-buffers-kill-terminal Emacs を終了する。未保存の変更があれば保存するか確認される
C-z suspend-frame サスペンドしてシェルに戻る(fg で復帰)

2 ファイル操作

2.1 ファイルを開く

C-x C-f   # ファイルを開く (find-file)

ミニバッファに Find file: ~/ と表示されるので、パスを入力します。TAB キーで補完できます。存在しないパスを指定した場合は空のバッファが作られ、保存した時点でファイルが実際に作成されます。

2.2 保存する

C-x C-s   # 上書き保存 (save-buffer)
C-x C-w   # 別名で保存 (write-file)

C-x C-w ではミニバッファに Write file: と表示されるので、保存先のパスを入力します。

原稿でよく見かける誤りとして、保存を C-c C-s と書いてしまうケースがあります。C-c で始まるキーはメジャーモード固有の機能に割り当てられる領域であり、保存は C-x C-s です。

2.3 変更を破棄する

M-x revert-buffer   # ファイルの内容を読み直し、バッファの変更を捨てる
C-x k               # バッファを閉じる(未保存なら確認される)

2.4 バックアップと自動保存

Emacs は既定で次の 2 種類のファイルを作ります。

  • file~: 保存時に作られるバックアップ
  • #file#: 一定間隔で作られる自動保存ファイル

クラッシュや接続断からの復旧には M-x recover-file(単一ファイル)または M-x recover-session(セッション単位)を使います。これらのファイルを作業ディレクトリに散らかしたくない場合は、10 節の設定で 1 か所にまとめられます。

2.5 読み取り専用の切り替え

C-x C-q   # 読み取り専用と編集可能を切り替える

3 バッファとウィンドウ

3.1 バッファの操作

C-x b     # バッファを切り替える(TAB 補完可)
C-x C-b   # バッファの一覧を表示する
C-x k     # バッファを閉じる

ファイルを開くたびにバッファが増えます。ウィンドウを閉じてもバッファは残る点に注意してください。

3.2 画面の分割

C-x 2   # 上下に分割する (split-window-below)
C-x 3   # 左右に分割する (split-window-right)

「縦分割」「横分割」という言い方は、分割線の向きを指す場合と分割後の並びを指す場合があり、資料によって意味が逆転します。本記事では誤解を避けるため「上下分割」「左右分割」と表記します。

3.3 ウィンドウ間の移動

C-x o   # 別のウィンドウへ移動する (other-window)

3.4 ウィンドウを閉じる

C-x 0   # 現在のウィンドウを閉じる
C-x 1   # 現在のウィンドウ以外を閉じる

いずれもバッファ自体は閉じません。バッファを閉じるには C-x k を使います。

3.5 ウィンドウの大きさを変える

C-x ^   # 現在のウィンドウを縦に広げる
C-x }   # 現在のウィンドウを横に広げる
C-x {   # 現在のウィンドウを横に狭める
C-x +   # すべてのウィンドウの大きさを均等にする

4 カーソル移動

4.1 文字・行単位

C-p   # 上の行へ
C-n   # 下の行へ
C-b   # 1 文字左へ (backward)
C-f   # 1 文字右へ (forward)

4.2 単語単位

M-f   # 次の単語の末尾へ
M-b   # 前の単語の先頭へ

4.3 行頭・行末

C-a   # 行頭へ
C-e   # 行末へ

4.4 バッファの先頭・末尾

M-<   # バッファの先頭へ
M->   # バッファの末尾へ

JIS 配列では <shift + ,>shift + . です。不等号の開いている側が向いている方向(< は左=先頭、> は右=末尾)と対応させると覚えやすくなります。

原稿で M-> を先頭、M-< を末尾と書いてしまう誤りが頻出します。正しくは M-< が先頭、M-> が末尾です。

4.5 画面のスクロール

C-v   # 1 画面分進む
M-v   # 1 画面分戻る
C-l   # カーソル行を画面中央に置き直す(繰り返すと上端・下端へ)

4.6 行番号を指定して移動

M-g g   # 指定した行番号へ移動する (goto-line)

5 コピー・切り取り・貼り付け

Emacs では、切り取りとコピーの結果は kill-ring と呼ばれる履歴に積まれ、貼り付け(ヤンク)はそこから取り出す操作として実装されています。

5.1 範囲を選択する

C-SPC   # 現在位置にマークを設定する (set-mark-command)
C-x h   # バッファ全体を選択する

C-SPC を押すとミニバッファに Mark set と表示されます。その後カーソルを動かすと、マークとカーソルの間がリージョン(選択範囲)になります。

5.2 コピーと切り取り

M-w   # リージョンをコピーする (kill-ring-save)
C-w   # リージョンを切り取る (kill-region)
C-k   # カーソル位置から行末までを切り取る (kill-line)

C-k は行末で再度押すと改行そのものを削除します。したがって、行頭で C-k を 2 回押すと 1 行がまるごと消えます。

M-x はコマンド実行のためのキーであり、コピーではありません。コピーは M-w です。

5.3 貼り付け

C-y   # kill-ring の先頭を貼り付ける (yank)
M-y   # 直前に貼り付けた内容を、1 つ前の履歴に置き換える (yank-pop)

M-yC-y の直後にのみ有効で、繰り返すと履歴をさかのぼれます。

5.4 組み合わせの例

カーソル行からバッファ末尾までをコピーする場合は次のとおりです。

C-SPC   # マークを設定
M->     # バッファ末尾まで移動(ここまでがリージョン)
M-w     # リージョンをコピー

5.5 矩形編集

列を揃えた編集には矩形コマンドが使えます。

C-x r k   # 矩形領域を切り取る (kill-rectangle)
C-x r y   # 矩形領域を貼り付ける (yank-rectangle)
C-x r t   # 矩形領域の各行に文字列を挿入する (string-rectangle)

いずれも C-SPC でマークを置き、対角の位置にカーソルを移動してから実行します。


6 取り消しと中断

C-g          # 実行中のコマンドや入力を中断する(ミニバッファから抜ける)
C-x u        # 取り消し (undo)
C-/ , C-_    # 取り消し(同上。端末によっては C-/ が届かないため C-x u が確実)

Emacs には独立した「やり直し (redo)」コマンドが標準では用意されていません。取り消しの途中で C-g を押して系列を区切り、再度 C-x u を押すと、取り消した操作を戻す動作になります。

操作に迷ったとき、あるいは想定外のプロンプトが出たときは、まず C-g を押してください。


7 検索と置換

7.1 インクリメンタル検索

C-s   # 前方検索 (isearch-forward)
C-r   # 後方検索 (isearch-backward)

文字を入力するたびに候補が絞り込まれます。検索中の主な操作は次のとおりです。

  • C-s: 次の一致へ進む
  • C-r: 前の一致へ戻る
  • RET: 現在位置で検索を終了する
  • C-g: 検索を中止し、開始位置に戻る

正規表現で検索する場合は C-M-s(前方)を使います。

7.2 置換

M-%     # 対話的な置換 (query-replace)
C-M-%   # 正規表現による対話的な置換 (query-replace-regexp)

置換対象ごとに次の入力を求められます。

  • y または SPC: 置換する
  • n: 置換せず次へ
  • !: 残りをすべて置換する
  • q または RET: 置換を終了する

置換はカーソル位置から末尾方向に進みます。バッファ全体を対象にしたい場合は、M-< で先頭へ移動してから実行してください。


8 シェルとの連携

8.1 Emacs 内でシェルを動かす

M-x shell       # シェルをバッファ内で動かす
M-x eshell      # Emacs Lisp で実装されたシェル
M-x ansi-term   # 端末エミュレーション(curses を使うプログラムも動く)

起動は M-x shell です。C-x shell ではありません。M-x はコマンド名を入力して実行するためのキーであり、shell はコマンド名です。

M-x shell で起動したバッファは通常の Emacs バッファなので、出力を C-SPCM-w でコピーしたり、C-s で検索したりできます。

8.2 単発のコマンド実行

M-!   # コマンドを実行し、結果を別バッファに表示する (shell-command)
M-|   # リージョンを標準入力として渡し、コマンドを実行する (shell-command-on-region)

8.3 分割してシェルを開く例

C-x 2       # 上下に分割
C-x o       # 下のウィンドウへ移動
M-x shell   # シェルを起動

これで、上のウィンドウでファイルを編集しながら、下のウィンドウでコマンドを実行できます。

8.4 ビルドとエラー箇所への移動

M-x compile   # ビルドコマンド(既定は make -k)を実行する

エラー行が出力された場合、その行にカーソルを合わせて RET を押すと該当ファイルの該当行へ移動できます。


9 コマンド実行とヘルプ

9.1 コマンドを名前で実行する

M-x   # コマンド名を入力して実行する (execute-extended-command)

キーバインドが割り当てられていない機能は、すべてこの方法で呼び出せます。TAB で補完できます。

9.2 ヘルプ

C-h k   # 指定したキーに割り当てられたコマンドを表示する
C-h f   # 関数(コマンド)の説明を表示する
C-h v   # 変数の説明を表示する
C-h b   # 現在有効なキーバインドの一覧を表示する
C-h t   # チュートリアルを開く

C-h k は、キー操作を忘れたときや、あるキーが何をするか確認したいときに有用です。ヘルプ画面は q で閉じます。


10 最小限の設定 (init.el)

設定ファイルは ~/.emacs.d/init.el に置きます。以下は副作用が小さく、CUI 環境でも有効な設定の例です。

;; 起動時のスタートアップ画面を表示しない
(setq inhibit-startup-screen t)

;; 行番号を表示する(Emacs 26 以降)
(global-display-line-numbers-mode 1)

;; 対応する括弧を強調する
(show-paren-mode 1)

;; インデントにタブではなくスペースを使う
(setq-default indent-tabs-mode nil)

;; バックアップ (file~) と自動保存 (#file#) を 1 か所にまとめる
(setq backup-directory-alist '(("." . "~/.emacs.d/backup")))
(setq auto-save-file-name-transforms '((".*" "~/.emacs.d/backup/" t)))

global-display-line-numbers-mode は Emacs 26 以降で利用できます。バージョンは端末で emacs --version を実行するか、Emacs 内で M-x emacs-version を実行すると確認できます。設定を書き換えた後は、M-x eval-buffer で読み込むか、Emacs を起動し直してください。


11 チートシート

分類 キー 動作
終了・中断 C-x C-c Emacs を終了する
C-g 実行中の操作を中断する
C-zfg サスペンドと復帰
ファイル C-x C-f ファイルを開く
C-x C-s 上書き保存
C-x C-w 別名で保存
バッファ C-x b バッファを切り替える
C-x C-b バッファ一覧
C-x k バッファを閉じる
ウィンドウ C-x 2 / C-x 3 上下分割 / 左右分割
C-x o 別のウィンドウへ移動
C-x 0 / C-x 1 現在のウィンドウを閉じる / 他を閉じる
移動 C-p C-n C-b C-f 上 / 下 / 左 / 右
M-f / M-b 単語単位で前後へ
C-a / C-e 行頭 / 行末
M-< / M-> バッファ先頭 / バッファ末尾
C-v / M-v 1 画面進む / 戻る
M-g g 行番号を指定して移動
編集 C-SPC マークを設定(範囲選択の開始)
M-w コピー
C-w 切り取り
C-k 行末まで切り取り
C-y / M-y 貼り付け / 履歴をさかのぼる
C-x u 取り消し
検索・置換 C-s / C-r 前方検索 / 後方検索
M-% 対話的な置換
シェル M-x shell Emacs 内でシェルを起動
M-! 単発のコマンド実行
ヘルプ C-h k キーに対応するコマンドを調べる
C-h t チュートリアル
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?