もくじ
前回も書いたように、Org modeは機能が増えすぎて今やなんだか訳のわからないものになっているが、本業はあくまでアウトライン・プロセッサ(英語圏ではアウトライナーと言うらしい)であって、アウトラインで構造化された文章を書くための道具として開発されたのである。
アウトラインとは、大ざっぱに言ってしまえば見出しのことで、大見出しで大まかな話、中見出しで少し細かい話、小見出しで詳細…という具合に、見出しの階層と内容の細かさを対応させて整理された文章を書く、というのがアウトライン・ライティングの狙いであった。Org modeには、このための支援機能が大量に備わっている。
追加の設定
Org modeは、.org
というという拡張子のついたファイルを開くと自動的に有効になる。まあ、M-x org-mode
を実行すればどのバッファでも有効になるので、どうでもいいとも言えるが。
好みによるのかもしれないが、Org modeで長い文章を書く場合、~/.emacs.d/init.el
に
(setq org-startup-truncated nil)
を入れたほうがよいのではないかと思う。これは行の折返し(line wrapping)の設定で、Org modeはデフォルトでは行を折り返さないのである。手で適当に改行して一行を短くするか、適宜M-q
で段落を詰め込めばよいのだろうが、私の場合だらだら改行を入れずに書いていくことが多く、カーソルがどんどん右に移動して文章の最初のほうが見えなくなると不便なので、ウィンドウの幅で折り返してくれたほうがありがたい。ただ、表の編集で問題が出る可能性はある。
アウトラインの操作
さて、前回書いたメモを保存したnotes.orgファイルを(Emacs以外のエディタで)覗いてみれば分かるが、.orgファイルというのは実のところ単なるテキストファイルで、*
が見出しの印になっている。*
の数が増えれば増えるほど階層が下になる。
* 大見出し
かくかくしかじか
** 中見出し1
あれやこれや
*** 小見出し1
うんぬんかんぬん
** 中見出し2
foo
*** 小見出し2
bar
上の例の場合、大見出しの下に中見出し、中見出しの下に小見出しがあり、各見出しの下に本文がある。階層に制限はなく、いくらでも*
を増やすことができる。そして、*
のある行でTAB
を押すと、その見出しよりも下の階層が折り畳まれて見えなくなる。折り畳まれていることは見出し末尾の...
の有無でわかる。上位の見出し上でTAB
を何度か押すと折り畳み具合が変わる。言葉で書くとややこしいが、やってみればすぐ分かるだろう。
まっさらな状態でM-RET
(RETはReturn/Enterキー)を打つと、*
が挿入される。その時点で最上位の階層の見出しが入力できるようになるわけだ(もちろん、*
の下であれば**
が挿入される)。すでにある行を見出しにする(ようするに行頭に*
を挿入)には、C-c *
である。これはトグルになっているので、もう一度押すと元に戻る。別に、手でアスタリスクを書いたり消したりしてもいいのだが…。
行頭に一つでも*
があれば、M-矢印キー
で階層を動かすことができる。M-右矢印
で階層が下に(*
が一つ増える、例えば大見出しが中見出しになる)、M-左矢印
で階層が上に(*
が一つ減る)ということになる。また、SHIFTキーも押してM-S-矢印
にすると、その見出し以下の階層すべてが動く。これも言葉で書くとピンとこないかもしれないが、やってみればすぐ分かる。
もう一つ重要なのが、サブツリー(見出しツリー)単位でのカット&ペーストだ。サブツリーというのは、ようするにある見出しからその下の階層すべて、ということだが、カットがC-c C-x C-w
、ペーストがC-c C-x C-y
である。上の例だと、中見出し1の上でC-c C-x C-w
を叩くと、中見出し1と小見出し1がセットで切り取られる。これにより、見出しの組み換えや、後で出てくるメモの切り貼りが簡単にできるようになる。三連続の打鍵てなんだよ、覚えられねえよという向きもあるだろうが、多用するのですぐ覚えるだろう。
あとは、C-c C-n
(nextなので前進)とC-c C-p
(previousなので後退)で見出しから見出しへジャンプできることを覚えておくとよい。段落から段落へはC-上矢印
またはC-下矢印
でジャンプできる。
他にも様々なキーバインドがあって、それはThe Org Manual: Structure editingを読めば分かるが、当面必要なのはこれくらいだと思う。
Org-refileの設定
前回説明したOrg-captureによるメモ取りをアウトライン・プロセッシングと組み合わせるには、Org-refileの設定をしておくと便利である。refileというのは、あるファイルの一部を、見出しツリー単位で他のファイルの見出しの下にリファイル(移動)するという機能で、これを使えばnotes.orgに記録したメモを簡単に他のファイルへ移すことができる。
最低限必要な~/.emacs.d/init.el
の設定は
(setq org-agenda-files '("~/ownCloud/Org"))
(setq org-refile-targets '((org-agenda-files :maxlevel . 3)))
である。org-agenda-files
という変数名に変な感じがするかもしれないが、これは、後で説明するOrg-agenda
という機能と共用しようと思っているからで、ようするにOrgディレクトリの中のファイルすべてを対象にする、ということだ。重要なのはその次のorg-refile-targets
で、Orgディレクトリ以下の.orgファイルに関し、maxlevelが3階層目、すなわち***
の見出しまでを移動先として選べるようにするという指定である。
このように設定し、Orgディレクトリに.orgファイルを入れておけば、見出しの上でC-w
を押すと、Refile subtree "指定した見出し" to (default 他のファイルの見出し(other.org)):
みたいなメッセージがミニバッファに出ると思う。ここで他のファイルの中の見出しを指定してやれば、そこの下へ今C-w
を叩いたサブツリーが一発で移動するのである。このように、Org-refileをうまく使うとファイル間で見出し項目の移動が素早くできるようになる。
ちなみに、すでにいじらないことがほぼ確定している.orgファイルがあると移動先として見えてしまってうざったいので、そういう場合はOrgディレクトリから消すか他へ移動するか、あるいはC-c $
でアーカイヴ化するとよい。アーカイヴ化というと大層に聞こえるが、基本的には拡張子を.orgから.org_archiveに変えているだけである。
また、私自身は使っていないが、別に.org
ファイルをOrgディレクトリ以下に置かなくても、org-refile-targets
周りに少し手を加えて
;; cf. https://www.emacswiki.org/emacs/OrgMode#toc21
(defun mhatta/org-buffer-files ()
"Return list of opened Org mode buffer files"
(mapcar (function buffer-file-name)
(org-buffer-list 'files)))
(setq org-refile-targets
(quote ((nil :maxlevel . 3)
(mhatta/org-buffer-files :maxlevel . 1)
(org-agenda-files :maxlevel . 3))))
などとすれば、現在バッファで開いている.org
ファイルであれば、Orgディレクトリ下になくともリファイル先に指定できるようになる。
Org-refileについて更に細かく知りたい人は、The Org Manual: Refile and copyを読むと良いだろう。
具体的なワークフロー
以上のような設定をしておくと、次のようなワークフローで文章を書くことができるようになる。日本語のアウトライン・プロセッシングの解説書は、読んで見るとなんだかやたらややこしいというか、そういう機能があることは分かったが具体的にどう使ったらいいか分からないというか、しまいには人生訓みたいな話になって困惑することもあるのだが、これは比較的実用的だと思う。
- 原稿の.orgファイルをOrgディレクトリ以下に用意する。そうすればOrg-refileの対象になる。
- とりあえず
M-RET
を打って見出しを一つ用意し、文章のタイトルでも書く。* 文章のタイトル
といった具合。一応文章全体が一つの見出しの下にあったほうが管理がしやすいと思う。実質的な見出しは**
からということですね。 - 見出しのことなどはあまり考えず、とにかく思いつくことを、一行ずつ空けて単語や文章でがーっと列挙する。だらだらやっても限界があるので、5分とか時間を切ってやるとよい。
- あとは、
C-c *
等を使ってこれはというものを見出しにし、階層を変えたり順序を組み替えたりして、仮の目次というかアウトラインをでっちあげる。最初のアウトラインにこだわってもしょうがないというか、どうせ書いている最中に大きく変わるに決まっているので、あまり時間をかけるべきではない。3のアイデア出しも含めて、1ポモドーロ(25分)を超えると長すぎると思いますね。ちなみにこのブログ記事のアウトラインは、元は* アウトライン・プロセッサとしてのOrg mode ** キーバインド ** メモとの連携 ** Org refile ** まとめ * 未整理
みたいな感じだった。
ポイントは、「未整理」という項目を用意することである。別に名前は「未整理」でなく、「メモ」でも「雑」でもなんでもよいのだが、本来の目次とは無関係な、一時バッファ的なものを末尾に置くわけです。notes.orgに保存したメモよりも上の階層の見出し(上の例では
**
ではなく*
)が良い。 - あとは、書けるところから書く。途中で何か思いついたら、前回紹介したOrg-captureでメモをとる。文章を書いていると全然関係ないことを思いつくというか、むしろとりあえず書き始めないと何も思いつかないというところがあるので、とにかく書いてどんどんnotes.orgに保存していく。
- 行き詰まったら
C-M-^
でメモを呼び出して眺める。これは、というものがあったらOrg-refileで原稿の.orgファイルの「未整理」以下にリファイルする。 - 見出し「未整理」の内容を検討し、本文に移したり、見出しを組み替えたり、あるいはやっぱり無関係なので未整理から追い出してnotes.orgに戻したり、といった検討作業を行う。トップダウンででっちあげたアウトラインを、ボトムアップで集めたメモで補ったり変更したりして煮詰めていくわけだ。
- ある程度アウトラインが定まったら、本格的に書いて、まとめて、仕上げて終わり。もちろんこの段階で構成を組み替えたって一向に構わない。
こんな具合でOrg modeを、アウトライン・プロセッサとしても活用してやれば、Org modeも以て瞑すべし、ということになるんじゃないでしょうかねえ。次の第3回は文章の(構造ではなく)見た目の修飾の仕方である。