Emacs

カーソル操作

コマンド

<left>は矢印左を示します。 <right>は矢印右を示します。

  • beginning-of-buffer (M-<)

    • バッファの先端に移動します。
  • end-of-buffer (M->)

    • バッファの終端に移動します。
  • forward-word (M-f)

    • 次の単語に移動します。
  • backward-word (M-b)

    • 前の単語に移動します。
  • forward-sentence (M-e)

  • backward-sentence (M-a)

    • 前のセンテンスに移動します。
  • forward-paragraph (M-})

    • 次の段落に移動します。
  • backward-paragraph (M-{)

    • 前の段落に移動します。
  • forward-sexp (C-M-f or C-M-<right>)

    • カーソルを次の評価式に移動します。
  • backward-sexp (C-M-b or C-M-<lefqt>)

    • カーソルを前の評価式に移動します。
  • mark-sexp (C-M-@ or C-M-SPC)

    • 評価式を範囲選択します。
  • transpose-sexps (C-M-t)

    • 評価式の位置を入れ替えます。
  • kill-sexp (C-M-k)

    • 評価式を切り抜きます。
  • beginning-of-defun (C-M-a)

    • カーソルを関数の先頭に移動します。
  • end-of-defun (C-M-e)

    • カーソルを関数の末尾に移動します。
    • 正確には関数の次の行に移動します。
  • mark-defun (C-M-h)

    • 関数全体を範囲選択します。
  • forward-list (C-M-n)

    • カーソルを括弧内の次のグループに移動します。
    • ただし、カーソルが括弧開きに位置する場合は括弧閉じに一度立ち寄ります。
  • backward-list (C-M-p)

    • カーソルを括弧内の前のグループに移動します。
    • ただし、カーソルが括弧閉じに位置する場合は括弧開きに一度立ち寄ります。
  • backward-up-list (C-M-u)

    • カーソルを1階層上に位置する括弧に移動します。
  • down-list (C-M-d)

    • カーソルを1階層下に位置する括弧内に移動します。

transpose-sexpsの補足

以下は評価式の入れ替えの例です。

1
2
3
                                       この括弧開きにカーソルを合わせる
(when (and (derived-mode-p 'org-mode) (buffer-file-name))
	  (message "hello"))

transpose-sexps (C-M-t) を実行すると次になります。

1
2
3
            入れ替わったことがわかる
(when (and (buffer-file-name) (derived-mode-p 'org-mode))
	  (message "hello"))

バッファ操作

コマンド

  • save-buffer (C-x C-s)

    • バッファの保存
  • list-buffers (C-x C-b)

    • バッファリストを表示
  • switch-to-buffer (C-x b)

    • バッファの切り換え
  • kill-buffer (C-x k)

    • バッファの削除
  • kill-buffer-and-window (C-x 4 0)

    • バッファ削除とウィンドウ消去
  • previous-buffer (C-x C-<left> or C-x <left>)

    • 前のバッファに切り替え
  • next-buffer (C-x C-<right> or C-x <right>)

    • 次のバッファに切り替え

バッファの評価

初期設定ファイルに変更を加え,それをすぐに反映させる場合 (emacsの現在のバッファがinit.elだったのみ有効)

1
M-x eval-current-buffer

変更した部分のみ,すぐに反映させる場合

1
M-x eval-region

バッファリストのMR欄で表示される記号の意味

Mark function
* バッファの変更を保存していない
. バッファがウィンドウで表示中

資料

TBD.

ウィンドウ操作

コマンド

  • delete-window (C-x 0)

    • 現在のウィンドウを削除する
  • delete-other-windows (C-x 1)

    • 現在のウィンドウ以外を削除する
  • split-window-below (C-x 2)

    • ウィンドウを上下の2つに分ける
  • split-window-right (C-x 3)

    • ウィンドウを左右の2つに分ける
  • switch-to-buffer-other-window (C-x 4 b)

    • 新しいウィンドウに選択したバッファを表示する
  • delete-frame (C-x 5 0)

    • 現在のフレームを削除する
  • delete-other-frames (C-x 5 1)

    • 現在のフレーム以外を削除する
  • other-window (C-x o)

    • ウィンドウの切り換え
  • enlarge-window (C-x ^)

    • ウィンドウの枠を広げる
  • enlarge-window-horizontaly (C-x })

    • ウィンドウの枠を広げる
  • shrink-window

    • ウィンドウの枠を狭める
    • 既定のキーバインディングはない
    • 筆者は C-x w s v に割り当てた
  • shrink-window-horizontaly (C-x {)

    • ウィンドウの枠を狭める
  • maximize-window

    • ウィンドウを可能な限り最大化
    • 既定のキーバインディングはない
    • 筆者は C-x w } に割り当てた
  • minimize-window

    • ウィンドウを可能な限り最小化
    • 既定のキーバインディングはない
    • 筆者は C-x w { にひとまず割り当てた

文字コード

コマンド

  • set-buffer-file-coding-system (C-x RET f coding RET)

    • 表示中のバッファの文字コードを変更します。
  • universal-coding-system-argument (C-x RET c coding RET)

    • バッファを開く際に文字コードを指定します。
  • revert-buffer-with-coding-system (C-x RET r coding RET)

    • 表示中のバッファを文字コードを指定して開き直します。

文字サイズ

コマンド

  • text-scale-adjust (C-x C-+ or C-x C-= or C-x C-- or C-x C-0)

    • 文字サイズを変更する。現在のバッファのみに影響する。
  • global-text-scale-adjust (C-x C-M-+ or C-x C-M-= or C-x C-M-- or C-x C-M-0)

    • 文字サイズを変更する。すべてのバッファに影響する。
    • いずれかのキーバインド入力でミニバッファに文字サイズ変更のキーが表示される。 ./images/figure_emacs_text_scale_adjust_01.png

      • +, = で文字を大きく
      • - で文字を小さく
      • 0 で文字を元の大きさに戻す
      • ESC で終了

テキスト編集

大文字と小文字

Key Action 説明 Note
M-l downcase-word ポイントに続く単語を小文字に変換します
M-u upcase-word ポイントに続く単語を大文字に変換します
M-c capitalize-word ポイントに続く単語を大文字で始めます
C-x C-l downcase-region リージョンを小文字にします
C-x C-u upcase-region リージョンを大文字にします

矩形選択 - cua-rect.el

  • cua-rectangle-mark-mode (M-RET)

    • 矩形選択の開始
    • org-modeの org-meta-return と競合する可能性あり
  • cua-set-rectangle-mark (C-<return>)

    • 矩形選択の開始
    キーバインド 説明
    M-b 矩形をスペースで埋める
    M-f 矩形を入力された1文字で埋める
    M-i 矩形の各行の数値をインクリメントする
    M-k 矩形をキルする
    M-n 矩形の各行にインクリメントされた数値をフォーマットして挿入する
    M-r 矩形を置換する
    M-t 矩形を入力された文字列で埋める
    M-パイプ 矩形を入力としてシェルコマンドを実行する。引数が指定されている場合はシェルコマンドの結果が矩形に埋まる
    M-/ 矩形の正規表現にマッチする行をハイライト

ブックマーク - bookmark.el

bookmark.el - Emacs source repository

様々なファイルを閲覧していると「あのファイルはどこにあっただろうか」と忘れてしまうことがあります。 そのため、閲覧箇所を記録する機能を提供する bookmark.el を活用して対処します。 なお、bookmark.elはEmacs標準搭載の機能です。

コマンド

コマンド キーバインド 振る舞い
bookmark-set C-x r m カーソルの位置をブックマークします。
bookmark-jump C-x r b 選択したブックマークにジャンプします。
bookmark-bmenu-list C-x r l すべてのブックマークの一覧を表示します。
bookmark-save 未設定 ブックマークしたものを変数 bookmark-default-file のファイルに保存します。

変数 bookmark-default-file の既定値は .emacs.d/bookmarks です。

ファイル保存のタイミング

bookmark.elの既定動作ではEmacsの終了時にブックマークをファイルに保存します。 ブックマークした時点で保存をしたい場合は、 bookmark-save-flag に1を指定します。

dired-mode (ファイラ)

コマンド

以下のコマンドで dired バッファを呼び出します。

  • dired (C-x d)
  • dired-other-window (C-x 4 d)
  • dired-jump (C-x C-j)
  • dired-jump-other-window (C-x 4 C-j)

以下のコマンドは dired バッファで有効です。

コマンド 動作
q ディレクトリエディタ終了
p ディレクトリエディタ内を上に移動
n ディレクトリエディタ内を下に移動
g 画面を更新
f カーソル位置のディレクトリに移動する
+ ディレクトリを作成する
d カーソル位置に削除マークを付ける
x 削除マークを付けたものを消去する
m コピーしたいファイルを選択
C コピー
R 移動および名称変更
Z 圧縮 / 展開
u マークを外す
U 全てのマークを外す
\^ 親ディレクトリに移動する (\はエスケープ)

EasyPG - epg.el

EasyPG (epg.el) はEmacsからGnuPGを操作してPGPによる暗号、復号を実現する機能です。同機能はEmacsに標準搭載されています。

動作環境

以下の動作環境を前提にします。

  • macOS Sonoma v14.2.1
  • GPG Suite 2023.3

    • MacGPG v2.2.41

      • コマンドラインとして /usr/local/MacGPG2/bin/gpg が提供されます。
      • /usr/local/MacGPG2/bin/gpg のバージョンは gpg (GnuPG/MacGPG2) 2.2.41 です。
  • GNU Emacs v28.1

利用方法

利用方法は以下の通りです。

  1. find-file などで拡張子 .gpg のファイルを作成します。

    • ここでは例として example.gpg を作成します。
  2. バッファを保存します。
  3. どのPGP鍵で署名するか選択する以下のようなバッファが表示されます。選択後に [OK] をクリックします。

    Select recipients for encryption.
    If no one is selected, symmetric encryption will be performed.	
    - ‘m’ to mark a key on the line
    - ‘u’ to unmark a key on the line
    [Cancel] [OK]
    
    - {VALUE} GPGTools Team <team@gpgtools.org>
    - {VALUE} GPGTools Support <support@gpgtools.org>
    u {VALUE} YOUR NAME <your-email-address@example.com>
    
  4. GPG Suiteのダイアログを表示するのでPGP鍵のパスフレーズを入力します。 images/figure_emacs_easypg_02.png
  5. 作成した example.gpg が暗号化されているか確認します。

    • コマンド例: cat example.gpg
  6. 作成した example.gpg を復号できることを確認します。

    • コマンド例: gpg2 --output - --decrypt example.gpg

Org Mode - org.el

Org Mode はEmacsが標準で提供する拡張機能です。同機能のプロジェクトサイトでは以下のように紹介しています。

Org mode は、様々な機能をサポートしています。メモを取ることから、タスクリストの管理、プロジェクトの管理、文書の編集、再現性のある計算ノート、文芸的プログラミングなどです。これらを高速で効率的なプレーンテキストシステムで実現しています。

以下のリンク先に詳細な情報が載っています。

  1. Org mode for GNU Emacs
  2. Org Mode Compact Guide
  3. The Org Manual
  4. Org tutorials

見出し

コマンド

見出しとカーソル移動

動作 キーバインド 関数
見出しの位置を上に移す M-up org-metaup
見出しの位置を下に移す M-down org-metadown
見出しの位置を1階層上に移す M-left org-metaleft
見出しの位置を1階層下に移す M-right org-metaright
カーソルを近くにある前の見出しに移す C-c C-p outline-previous-visible-heading
カーソルを同階層にある次の見出しに移す C-c C-n outline-next-visible-heading
カーソルを現階層の親の見出しに移す C-c C-u outline-up-heading
  • org-backward-heading-same-level (C-c C-b)

    • カーソルを同階層の前の見出しに移動します。
  • org-forward-heading-same-level (C-c C-f)

    • カーソルを同階層の次の見出しに移動します。
  • org-promote-subtree (C-c C-<)

    • 現在の見出しを子見出しも含めて1階層浅くします。
  • org-demote-subtree (C-c C->)

    • 現在の見出しを子見出しも含めて1階層深くします。
    • 見出しの位置で M-S <right> を押した場合も同様です。

なお、筆者は以下のようにキーバインドを調整しています。

  • org-backward-heading-same-level (C-c <up>)
  • org-forward-heading-same-level (C-c <down>)

コピー/カット/ペースト

動作 キーバインド 関数
見出しと本文を切り取る C-c C-x C-w org-cut-special
見出しと本文をコピーする C-c C-x M-w org-copy-special
見出しと本文を貼り付ける C-c C-x C-y org-paste-special

プロパティ

https://orgmode.org/manual/Property-Syntax.html http://orgmode.org/guide/Properties.html

  • org-set-property (C-c C-x p)

    • プロパティを設定する
  • org-delete-property

    • プロパティを削除する
    • Property Syntax (The Org Manual)には C-c C-c d でプロパティを削除できると記載がある。
    • 筆者の環境ではそのキーバインディグは確認できなかった。

単語はアンダースコアでつなぐ。

:LAST_REPEAT: hogehoge
ID

見出しはプロパティにIDを持てる。 M-x org-id-get-create で作成する。

1
2
3
.:PROPERTIES:
.:ID:  0A9AAD49-F4D8-467F-8FD6-E8989456640F
.:END:
コマンド
  • org-id-get-create

    • 筆者は M-z o i にアサインしています。

タグ

  • org-set-tags-command (C-c C-q)

    • 現在の見出しにタグを設定する

下記のように予めタグのリストをorgファイルに記述にしておけば、 org-set-tags-command実行時にそのリストが表示される。

#+TAGS: laptop car pc

TODOキーワード

コマンド
  • org-todo (C-c C-t)

    • 現在の見出し(エントリー)にTODOキーワードを付与する
    • このコマンドを実行するとTODOの状態が遷移する
  • org-insert-todo-heading (S-M-RET)

    • TODOキーワード付きで新しい見出し(エントリー)を追加する
  • org-todo-list

    • M-x org-agenda t で呼び出し可
    • TODO付きの見出し(エントリー)を一覧で表示する

ナローイング (絞り込み)

ナローイング (絞り込み) はバッファ (ファイル) の表示範囲を制御できる。 Org-Modeでは特定の見出しのみを画面に表示するといったことが可能。

振る舞い キーバインド 関数名
現在のサブツリーに絞り込み C-x n s org-narrow-to-subtree
現在のブロックに絞り込み C-x n b org-narrow-to-block
絞り込みを解除する C-x n w widen
org-narrow-to-subtreのトグル なし org-toggle-narrow-to-subtre

資料

タスクと繰り返し

https://orgmode.org/manual/Repeated-tasks.html

毎月 +1m
毎週 +1w
毎日 +1d

特殊な記号

++ => ???
.+ => ???

TODOをアジェンダ化 - org-agenda.el

https://orgmode.org/manual/Agenda-Views.html

M-x org-ageda で表示します。

org-agenda-files に登録した .org ファイルを対象にTODOなどを表示します。

  • org-agenda-file-to-front (C-c [)

    • 現在のファイルを org-agenda-files に追加します。
  • org-remove-file (C-c ])

    • 現在のファイルを org-agenda-files から除外します。
  • org-cycle-agenda-files (C-' or C-,)

    • org-agenda-files のファイルを順番に移動します。
  • org-agenda-set-restriction-lock (C-c C-x <)

    • org-agenda の処理対象を現在のサブツリーに限定します。
    • org-agenda-set-restriction-lock 実行後、該当箇所がグレー色に変わります。
  • org-agenda-remove-restriction-lock (C-c C-x >)

    • org-agenda-set-restriction-lock を解除します。

agenda view

アジェンダビューは日、週、月、年単位で表示される。 その表示単位に応じて、下記のキーでアジェンダを移動できる。

キー 機能
f 次のアジェンダを表示
b 前のアジェンダを表示
j 指定した日を表示

アジェンダビューの表示単位は下記のキーで切り替えることができる。

キー 機能
v d 日単位のアジェンダ表示に切り替え
v w 週単位のアジェンダ表示に切り替え
v m 月単位のアジェンダ表示に切り替え
v y 年単位のアジェンダ表示に切り替え

ソースコード実行 - ob.el

, でエスケープできる。

#+BEGIN_EXAMPLE
,#+TAGS: laptop car pc
#+END_EXAMPLE
1
2
3
4
5
6
7
8
9
using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}
1
2
3
4
5
6
7
8
9
(leaf org-contrib
  :ensure t)

(leaf org-babel
  :config
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((emacs-lisp . t)
     (csharp . t))))

基本操作

https://orgmode.org/manual/Key-bindings-and-Useful-Functions.html

  • org-edit-src-code (C-c ')

    • 前提条件: ソースブロック上で実行します。
    • ソースブロックを別のバッファで編集します。
  • org-babel-insert-header-arg (C-c C-v j)

    • 前提条件: ソースブロック上で実行します。
    • ソースブロックのヘッダー引数を指定します。
  • org-babel-execute-src-block (C-c C-c)

    • 前提条件: ソースブロック上で実行します。
    • ソースブロックを評価します。
  • org-babel-next-src-block (C-c C-v n or C-c C-v C-n)

    • 次のソースブロックに移動します。
  • org-babel-previous-src-block (C-c C-v p or C-c C-v C-p)

    • 前のソースブロックに移動します。

C#

org-contribパッケージにあるob-csharp.elを使う。

アーカイブ - org-archive.el

コマンド

  • org-archive-subtree (C-c C-x C-s)

    • (見出しの)サブツリーをアーカイブ用ファイルに移動する。

計時 - org-clock.el

コマンド

  • org-clock-report
  • org-dblock-update (C-c C-c or C-c C-x C-u)

脚注 - org-footnote.el

脚注は英語圏で footnote と呼ぶ。

以下にorg-modeの脚注の記載例を示す。(12.10 Creating Footnotes (The Org Manual)より引用)

The Org website[fn:1] now looks a lot better than it used to.
...
[fn:55] The link is: https://orgmode.org

コマンド

  • org-footnote-new

    • 新しい脚注を作成します。
  • org-footnote-goto-definition

    • 指定した脚注に移動します。
  • org-footnote-action (C-c C-x f)

    • カーソルが脚注のラベルにある場合は、脚注本文へ移動します。
    • カーソルに脚注のラベルがない場合は、新しい脚注を作成します。

Speed Keys

カーソルが見出しのアスタリスクにある場合に、n, pなどのキー入力でカーソルを動かすことができる。 ほかにもたくさんのショートカットキーがある。

コマンド

org-speed-commands を使う場合は、事前に org-use-speed-commands でフラグを立てておく。

(setq org-use-speed-commands t)

コマンドは M-x org-speed-command-help を参照のこと。

追加

org-speed-commands はカスタマイズできる。以下に例を示す。

(add-to-list 'org-speed-commands '("z" call-interactively #'consult-org-heading))

Org QL query - org-ql.el

alphapapa/org-ql - GitHub

例えば、 TODO コージーコーナーに行く買い物/誕生日 にrefileしたい場合、 org-ql-refile コマンドでクエリ欄に todo:TODO olp:買い物 誕生日 と入力すると、 TODOステータスが TODO で見出しのパス 買い物/誕生日 に移せる。

* Inbox
** TODO コージーコーナーに行く
* 買い物
** DONE クリスマス
** DONE 正月
** TODO 誕生日
M-x org-ql-refile
Refile to: todo:TODO olp:買い物 誕生日

ELPA: Emacs Lisp Package Archive - Package.el

コマンド

  • package-list-packages

package-list-packages*Packages* バッファが開く。 *Packages* バッファ表示中は次のコマンドを利用できる。

  • package-menu-quick-help (h)
  • package-menu-execute (x)
  • package-menu-delete (d)
  • package-menu-mark-unmark (u)
  • package-menu-mark-install (i)
  • package-menu-mark-install (U)
  • package-menu-mark-install (()
  • package-menu-filter-marked (/ m)
  • package-menu-filter-by-name (/ n)
  • package-menu-filter-by-status (/ s)
  • package-menu-filter-by-archive (/ a)
  • package-menu-filter-by-keyword (/ k)
  • package-menu-filter-by-vesion (/ v)
  • package-menu-filter-upgradable (/ u)
  • package-menu-clear-filter (/ /)