emacs - テキストエディタ

スポンサーリンク

Emacsはカスタマイズ性に優れたテキストエディタになります。GNUプロジェクトの一部として開発されています。Lispベースの言語(Emacs Lisp)を使って、ユーザーが機能を自在にカスタマイズできます。

この記事では、主にインストール方法やEmacsのOrgモードについて紹介します。

インストール方法

Emacs は推奨パッケージとして mailutils がインストールされます。
mailutils がインストールされると、インストール時に postfix の設定をする必要があり、少し面倒です。
単純なエディタとして使いたい場合、メール設定は不要なので、--no-install-recommends オプションを利用して、Emacs をインストールします。

また、emacs の日本語環境のためにはemac-mozcをインストールしておく必要があります。

mozcとはgoogle日本語入力のオープンソース版になります。

Linux環境で日本語を入力できるようにするにはibus-mozcまたはfcitx5-mozcをインストールします。emacs-mozcでもibus-mozcでもfcitx5-mozcでも結局はバックグラウンドではmozc-serverが動作します。mozc-serverまでのインタフェースがそれぞれ異なり、そこで使い勝手が変わってきます。

ibus-mozcはRedHat社が支援しており、Ubuntu, Fedora等でデスクトップ環境がGNOME系である環境で安定していて、日本語環境を標準インストールする際にインストールされています。 fcitx5-mozcはibus-mozcと比べて、高速で軽量であることを特徴としてKDEや軽量デスクトップ環境で安定していて人気があるとされています。 また、emacs-mozcはemacs環境で日本語入力を行うためのパッケージになります。emacs環境で日本語入力を行う場合はemacs-mozcが必要です。

または

設定ファイル

以下の設定ファイル(~/.emacs.d/init.el)では以下の項目のことをしています。

  • use-packageを使えるようにする。
  • 起動時のメッセージをオフ
  • バックアップファイルを作らない
  • オートセーブをしない
  • japanese-mozcで日本語入力ができるようにする
  • インクリメントサーチでもjapanese-mozcで日本語入力ができるようにする

Emacsで日本語を利用できるするようには、設定を追加する必要があります。内容に日本語を利用する場合と、インクリメントサーチに日本語を利用する場合で、それぞれ設定が必要です。また、ここでは特別なキーバインド設定は特に行っていません。

動作確認もしていますが、ChatGPTなどを利用して作成しています。以下の設定を利用する場合は自己責任でお願いします。

~/.emacs.d/init.el

emacsの簡単な操作

ここでは本当は Emacs のキーボード操作の方法を記述すべきなのかもしれませんが、GUI版の Emacs ではメニューバーが充実しています。最初の基本的な操作はメニューバーから操作をしてもいいかもしれません。そして、慣れてきたらキーボード操作でできるようになるといいでしょう。

唯一、慣れていない状態でも覚えておくべきキーボード操作は Ctrl+g だと思います。Ctrl+g は操作の中断になります。Ctrl+g を覚えておけば、何かをミスして操作できなくなったときに元の操作まで抜けることができる可能性が高いです。Vim での Esc キーに近い役割です。

メニューバーの表示非表示の一時的な切り替えは M-x menu-bar-mode でできます。

メニューバーの表示非表示の永続的な設定は init.el に以下の行のいずれかを追加することで設定できます。

Orgモード

デフォルトの状態では設定されていない、Org モードの推奨設定があります。

Org モードは .org の拡張子のファイルで自動的に起動します。それ以外の拡張子で Org モードを利用するにはファイルの最初の行に以下のような行を追加し読み込み直して起動させます。 Org モードになっている状態ではメニューバーに Org や Table のメニューが追加されます。そちらでもある程度の操作ができます。

Org モードはまず基本として以下のような見出しで構成します。

このような見出しの行に対して、Todo やスケジューリング等の様々な機能ができます。

Todo

Todo は以下のような見た目になります。このような見た目にするキーワードはキーボード操作で簡単に追加できます。

操作説明
S-right / S-left Todo の状態を変更 (または TODO を追加)
C-c C-tTodo の状態を変更 (または TODO を追加)
M-RET新しい見出しを作成(現在の見出しの下に)
M-S-RETTodo キーワードを付けて新しい見出しを作成(現在の見出しの下に)
M-up/down見出しのサブツリー単位の移動
M-S-up/down見出しの移動
M-left/right見出しのレベルの上げ下げ
M-S-left/right見出しのサブツリー単位のレベルの上げ下げ

また、Todo のキーワードの設定はカスタマイズが可能です。

ファイル毎に個別に設定する場合はファイルの先頭に

TODO のリストを出すための補完をするためのキーは M-TAB ですが、Windows だとマルチウインドウの切り替えとシステムのショートカットキーと競合しています。これを回避する方法として、Microsoft の PowerToys をインストールし、Keyboard Manager でキーを別のキーに割り当て、Emacs でそのキーを利用して、補完機能を使う方法があります。

以下は Windows 側で無変換キーを F14 に割り当てた後に、Emacs 側で無変換+TAB のキーで補完機能が利用できるように割り当てた例になります。Emacs 側では、F14 はよくわかりませんが KF86Launch5 として認識されるようです。

スケジューリング

スケジューリングは以下のような見た目になります。スケジューリングに関する行もキーボード操作で簡単に追加できます。ただし、スケジューリングのための日付設定はキーボード操作である程度できますが直接書き直したほうが早いかもしれない場合もあります。また、SCHEDULED: とDEADLINE: の順番は機能的には特に意味はありません。

操作説明
C-c C-sスケジュールを追加(予定日)
C-c C-d締切を追加

アジェンダモード

アジェンダモードを利用するにはinit.elに以下のようにアジェンダモードで使用するファイルを設定する必要があります。

ファイルのリストではなく、特定のディレクトリ全体を指定する場合 directory-file-recursively を利用できます。2つ目の引数は正規表現で .org ファイルを指定しています。 \\ はEmacs Lispのエスケープシーケンスで、正規表現のパターンで \. の形にし、. の一文字に一致します。 Emacs で新規で org ファイルを作成する場合は読み込み時に org ファイルが存在しないのでファイル保存後に開き直し、設定を読み直す必要があります。

操作説明
C-c aorg-agenda を起動(事前にコマンドを設定する必要有り)

org-agenda を起動する場合、さらに追加でコマンドを入力してアジェンダビューとしてそれぞれの画面に遷移できます。

操作説明
aアジェンダ一覧
tTODO の一覧表示
mタグによる検索
sテキスト検索
qアジェンダの終了

アジェンダビューはキーを入力して操作できます。ここではアジェンダビューの操作は多くあるため、使いやすい一部の操作を紹介します。

操作説明
qアジェンダビューの終了
r再読み込み(refresh)
tTODOの状態を変更
,優先度を変更

スケジューリングのアジェンダビューについては以下の操作があります。

操作説明
d または v d日表示
w または v w週表示
v m月表示
v y年表示
v SPC表示のリセット
j日付ジャンプ
f次の期間
b前の期間
.今日に移動

アジェンダビューでの操作でその他の表示に関するものは以下の操作があります。

操作説明
o他のウィンドウを削除
SPCアイテムの元の位置を別のウィンドウに表示
TAB別のウィンドウでアイテムの元の場所へ移動
RETアイテムの元の場所に戻り、他のウィンドウを削除
C-c C-x b現在の項目のサブツリー全体を間接バッファに表示

リスト

リストとして箇条書きリストと番号付きリストがあります。また、見出しの例のようにリストは階層を作ることができます。

操作説明
TABリスト内でインデント(入れ子に)
S-TABアウトデント(戻す)
M-S-RET同じ階層のリスト項目を追加
M-up / M-down項目を上下に移動

アルファベットのリストを許すには設定を追加する必要があります。

設定すると以下のように利用できます。

チェックリスト

チェックリストは以下のような見た目になります。

操作説明
M-RET新しい見出しを作成(現在の見出しの下に)
S-M-RET空欄のチェックボックスがある設定された新しい見出しを作成(現在の見出しの下に)
C-u C-c C-cチェックボックスのない場合にチェックボックスの作成
C-c C-cチェックボックスの切り替え

リンク

リンクはHTML(より近いのはマークダウンでのリンク)のようなリンクテキストを作成できます。作成方法は以下のようにし、正しく記述できるとテキストに下線が引かれたリンクテキストを作成できます。 リンクはemacsの新しいバッファで開くことができます。

操作説明
C-c C-oリンクを開く

表は以下のような見た目になります。

表の作成

操作説明
C-c |表の作成または表へ変換(アクティブ領域を指定。区切り文字は全行にあるTABまたはカンマで判断。存在しない場合は空白)
C-u C-c |カンマ区切り(csv)を表へ変換
C-u C-u C-c |TAB区切り(tsv)を表へ変換
C-u C-u C-u C-c |区切り文字にマッチする正規表現で表へ変換

表のデータ間の移動

操作説明
C-c C-c表の調整
TAB表を調整し、次のフィールドに移動
S-TAB表を調整し、前のフィールドに移動
RET表を調整し、次の行に移動
M-a現在のフィールドの先頭または前のフィールドに移動
M-e現在のフィールドの末尾または次のフィールドに移動

列データや行データの移動

操作説明
M-LEFT現在の列を左に移動
M-RIGHT現在の列を右に移動
M-UP現在の行を上に移動
M-DOWN現在の行を下に移動

表の編集

操作説明
C-c -現在の行の下に水平線を挿入
M-S-LEFT現在の列を削除
M-S-RIGHTポイント位置に新しい列を挿入。ポイント位置にあった列から右側の列はすべて右に移動
M-S-UP現在の行または水平線を削除
M-S-DOWN現在の行の上に新しい行を挿入
C-c ^表の行をソート 行の範囲は最も近い水平区切り線の間、または表全体 ポイントの位置はソートに使用する列 コマンド実行後にソートの種類(abc順、数値順、時間順、独自関数)を選択

表の転置やインポート・エクスポート

操作説明
M-x org-table-transpose-table-at-pointテーブルを転置し、水平線を削除
M-x org-table-importファイルを表としてインポート 表はタブまたは空白で区切る必要がある
M-x org-table-export表をファイルにエクスポート 表はデフォルト動作ではタブで区切られる

クロック

クロックは以下のような見た目になります。

タイマーの利用

操作説明
C-c C-x C-iクロックイン(Clock in) ← 開始
C-c C-x C-oクロックアウト(Clock out) ← 終了
C-c C-x e作業の見積もり時間を設定
C-c C-x C-eクロック中の作業での見積もり時間を再設定
C-c C-x C-d今日のクロックの集計表示

クロックテーブル

操作説明
M-x org-clock-reportクロックテーブルを挿入
C-c C-x x clocktableクロックテーブルを挿入(ブロックの生成)
C-c C-x x columnviewカラムビューを挿入(ブロックの生成)
M-x org-id-get-createidプロパティを生成
C-c C-x pプロパティを設定、コマンド後にプロパティ名とプロパティ値を要求

クロックテーブルが挿入されるとscopeがsubtreeで生成されます。

基本的に1つのファイルに1つのクロックテーブルで運用するような形でscopeはfileにしたほうが扱いやすい運用ができると思います。

:formula %で時間の割合が表示できます。:formulaは:formula "@1$3=string(\"sub time \")"のように使うと#+TBLFM: @1$3=string("sub time ")の行を挿入できますが、:formula %と併用ができず、#+TBLFMの行を入れるほどの計算もあまり利点がないため、:formula %でのみで運用したほうがよいと思います。

:compact tでコンパクトな表示ができます。

見積もりのプロパティを設定した場合はカラムビューを利用するとよいです。カラムビューを利用するには見出しにプロパティのIDとCOLUMNSを設定すると使いやすいです。 プロパティ値は直接記述できますが、コマンドを利用してもよいでしょう。M-x org-id-get-createでIDを自動生成でき、C-c C-x pでプロパティの設定ができます。 プロパティの設定はプロパティ名だけ設定をし、後から直接記述してもいいかもしれません。 C-C C-x x columnviewでカラムビューのひな形を作成し、scopeにidを設定し、C-c C-cで再計算するとCOLUMNSで設定した列を表示してくれます。

上のような見出しに対して、カラムビューを作ると以下のような表ができます。

計算列が必要ならCOLUMNSプロパティに列を追加し、

#+TBLFMを利用して計算すればよいでしょう。

Emacsのセッション間でクロックの履歴を保存したい場合は、以下の設定をinit.el等に追加します。クロックイン後にEmacsを終了して、Clockのログが中途半端な状態で終了した後にもう一度、Emacsを起動した後にクロックを再開するかどうかを尋ねられるようになります。 GUI版のEmacsを終了するときにクロックアウトをして保存するかどうか尋ねられますが、それはNoを選んで終了し再開させます。

タグ

タグはタスクや見出しに付けるラベルで、後で検索・フィルタに使えます。 見出しの行末に :tag1:tag2: のように記述されます。見出しの上の階層によって設定されたタグは継承されます。

また、0階層にタグを設定するようにファイル内の全ての見出しにタグを設定するような記述もできます。

タグを記述するときに簡単な補完機能が欲しい場合は、まず、#+TAGSを設定し、ファイルを読み直したら、ミニバッファの画面からタグを選択して補完できるようになります。 波括弧で囲むと排他的なタグとして扱うことができます。

角括弧を使うと階層構造を持ったグループ化することができます。タグを継承関係を使わずにグループ化されているタグで検索にマッチできます。

操作説明
C-c C-qタグ追加/編集
C-c C-cタグ追加/編集(タグ設定として利用する場合 C-c C-q と同じ)
C-c \タグ検索
/ Agendaでタグフィルタ

コメント

# から行末までがコメント扱いで、コメント行はAgendaなどに影響しません 。