秀丸エディタでアウトライナーを実現する試み

マクロを駆使しているが、意外と実現できそうな感触がある。キリのいいところまで出来たので一度リリースしてみる。

ここまでの成果物

GitHub にアップした。

github.com

動作イメージ

こんな感じ。

hidemaru_outliner

操作コンセプト

二段階アクセス。

  • (1) キー割り当て(たとえば Alt + X)などでメニューを出す
  • (2) 操作したいメニュー項目を選ぶ

上記の 2 ステップを踏む。メニュー項目にアクセラレーター( (&X) など)を設定してあるので、実際は (1)のショートカットキー → (2)のアクセラレーターに対応するキーの「キー二回押し」 で済む。

ここで「(1) だけで各操作を呼び出さないのか」と思われるかもしれないが、それだと操作が n 個あれば n 個分のキー割り当てが必要となり、割り当てを考えるのに苦労する。一方、この二段階アクセスなら、割り当ては (1) の一つのみだ。

インストール

GitHub にアップした stakiran/hidemaru_outliner 参照。

  • (1) 上記マクロファイルを入手する
  • (2) 入手したマクロを秀丸エディタに登録する
  • (3) 2 を素早く呼び出せるよう、キー割り当てにて適当なショートカットキーを割り当てる

利用者に求めるスキル

詳しい解説を手抜きしているので、今のところ利用者はかなり限定される。以下が必須。

  • 秀丸エディタで既に「アウトライン解析の枠」を利用していること
  • .mac ファイルからマクロを登録する手順を知っていること

要するに秀丸エディタに慣れている方向け。

もしこのアウトライナー計画が成功したら、初学者向けにも詳しい手順を整備したいと思う。

秀丸エディタでどのようにアウトライナーを実現するか

細かい解説、というか思考過程。

そもそもアウトライナーとは?

アウトラインプロセッサーとも呼ばれる。

文書をアウトライン(見出しと目次)ベースで編集する文書編集ソフトウェアのこと。テキストエディタ、リッチエディタ、Web サービスなどの形態がある。

アウトライナーのメリットは、文書を階層構造で視覚化しながら編集できること。書きやすく、読みやすく、また編集も(見出しの単位でまるごと移動させたりできるので)便利に行える。アウトラインのおかげで、たとえば 10 万字を超えるテキストを編集することも簡単になる。もしアウトラインがなければ、あちらこちらスクロールする地獄に見舞われるだろう。

どのアウトライナー方式を使うべき?

まずアウトライナーには リスト形式見出し形式 がある。

  • (1) リスト形式

リスト形式は、以下のように 文章のすべてが見出しとなっている

- 大見出し
  - 中見出し
    - 小見出し
      - 本文
      - 本文

つまりリスト形式では、文章は 箇条書きフォーマット になる。箇条書きを超えるフォーマットの文章は書けない。

  • (2) 見出し形式

一方、見出し形式は、以下のように 見出しと本文とが分離している

# 大見出し

## 中見出し

### 小見出し
本文本文

見出し形式では書籍のような長文コンテンツも書くことができる。ただし、見た目だけでは階層構造を読み取りづらい。

  • どちらの形式が良い?

私はアウトライナーの真価は「長文を階層的に扱うことで視認性と操作性を効率化すること」だと思っているので、本記事では 見出し形式 を前提とする。

秀丸エディタで実現するには

方法は一つしかないと思う。

アウトライン解析の枠 を使うことだ。

これは「表示中の文章に対し、特定のルールで見出し(大見出し、中見出し、小見出し……)を抽出したものを別ペインに表示する」機能である。

このペイン上では、見出し単位でジャンプしたり、折りたたんだり、並び替えたりできる。見出し単位で操作できるというわけだ。

詳しい導入方法などは テキストエディタにアウトラインを導入して快適なテキスト編集を手に入れる - Qiita こちらを参照。

アウトライン解析の枠だけでは不十分

しかしながら、アウトライン解析の枠だけでは、アウトライナーとしていささか物足りない。たとえば、

  • アウトライン解析の枠ではなく 本文領域を折りたたむことができない
  • アウトライン解析の枠は常に全レベルが展開されているため、「大見出しだけ表示する」といったことができない
    • やるにしても枠内で手作業で一つずつ折りたたむ必要があり、手間

追加機能を実装することにした

そこで、上記不満を解消するために、秀丸エディタマクロが持つ機能すべてを眺め、それらを効率的に呼び出す ことを考えてみた。

その結果、見つけたのが以下操作である。

  • 見出しバー > 表示/非表示
  • 折りたたみ
  • アウトライン解析の枠 > 表示/非表示
  • アウトライン解析の枠 > レベルnまで展開
  • アウトライン解析の枠 > 表示位置を●●に

あとは、これらを簡単に呼び出す方法を考えて実装するだけだ。採用した実装内容については、「操作コンセプト」にて上述した。

今後やりたいこと

目次のコピー

アウトライン解析の枠に表示されている内容をコピーする。

マクロでは「7171 ツリー表示:ツリーそのものをコピー」という操作が用意されているので、実現は可能。

折りたたみと枠の連動

秀丸エディタでは「(1) 編集エリア上で見出しを折りたたむ」と「(2) 枠上で見出しを折りたたむ」が、操作系統として異なっている。

(1) は「折りたたみ」として機能が提供されているが、(2) は提供されていない。(2) を実行する唯一の方法は、枠にフォーカスを合わせてカーソルキー左右を使うか、あるいはマウスで +/- のボタンをクリックするかだけだ。

(1) と (2) が表示上、連動していないのは微妙に違和感がある。もっというと (1) で編集エリアを折りたたんだら、それに対応する枠内の見出しも折りたたんで欲しい。この連動が、最も違和感がない挙動だと思っている。

しかし、(2) をマクロから呼び出す機能が提供されていないので、さて困ったものだ。

縦書きアウトライナー

秀丸エディタは縦書きをサポートしている。また、枠としても「7173 ツリー表示:表示方向縦書き」という操作があるし、枠の表示位置を上下に置くこともできる。

つまり 縦書きアウトライナーもできるはず

小説執筆時に重宝しそうだし、需要もありそうなので、実現してみたいところ。

枠の大きさを変える

現状、枠の大きさ(表示領域)を変更するためには、マウスで枠の端を掴んで D&D するしかない。これは手間だ。ショートカットキーで「狭め」「普通くらい」「広め」あたりを一発で切り替えられるようにしたい。

が、枠の大きさを変更する機能も用意されていないので、実現できない。

見出しの並び替えを効率化

今のマクロでは、見出しを並べ替える操作を省力化できていない。私が並び替えをあまり使わない、あるいは使うにしてもマウスで D&D するからなのだが、並び替えはアウトライナーの特徴の一つなので、もっと積極的に使うべきだろう。当然、素早く呼び出せるようになっている必要がある。

秀丸エディタは以下の機能が搭載されているので、実現は可能だ。

  • 7167 ツリー表示:この見出しだけのレベルを上げる
  • 7168 ツリー表示:この見出しだけのレベルを下げる
  • 7169 ツリー表示:下位レベルも含めて上移動
  • 7170 ツリー表示:下位レベルも含めて下移動

「アウトライン解析」ウィンドウ

「アウトライン解析」ウィンドウという、地味に便利なウィンドウがある。

その他 > コマンド一覧 > その他 > アウトライン解析 から呼び出してみてほしい。これは「アウトライン解析の枠を別ウィンドウで表示した画面」だ。加えて、範囲選択や移動といった操作が行える。 目次を別ウィンドウで俯瞰したい場合 に便利そうだ。

このウィンドウも簡単に開けるようにしたい。

アウトラインについてもっと学んで取り入れる

私はアウトライナーについては無知なので、体系的に学んでおきたい。学んだことや、そこからひらめいたことなどは適宜取り入れていきたい。

ubiteku.oinker.me