vimtexのfoldカスタマイズ。

lervag/vimtexで、foldingを有効にしてみたら文書の見通しがよくなったので、自分的カスタマイズとその他のメモなど。

\section や \subsection、あるいは itemize や description、lstlisting などの部分を折りたたむことができれば、文書の構成がより把握しやすくなるし、編集もしやすくなってくるので、なにを折りたたむかの設定やキーマップなどをざっくりとまとめます。

まず vimtex の構成として、折りたたみ動作は fold.vim がやっているようです。その中のvimtex#fold#init_buffer() を見ると、ある程度の初期化がされているのがわかります。つらつら見ていくとどういう構造で折りたたもうとしているのかがおおよそわかります。

折りたたみはデフォルトでは無効になっているので、これを有効にしてやればまずは折りたたみができるようになります。

let g:vimtex_fold_enabled = 1

g:vimtex_fold_manual = 1にすると、デフォルトで折りたたみ処理を行わない状態でファイルを開きます。大きいファイルをよく扱うような場合に、ファイル読み込みが遅くなるのを回避します。このとき、キーマップ zx と zX がリマップされます。

折りたたみの操作は以下の通り。詳細については :h fold を参照。
  • zo カーソルの下の折りたたみを1段階開く。カウントが与えられればカウント数分開く。
  • zO カーソルの下の折りたたみをすべて開く。
  • zc カーソルの下の折りたたみを1段階閉じる。カウントが与えられればカウント数分閉じる。
  • zC カーソルの下の折りたたみをすべて閉じる。
  • za カーソルの下の折りたたみが閉じていれば開く。開いていれば閉じて、foldenableをセットする。
  • zA カーソルの下の折りたたみが閉じていれば再帰的に開く。開いていれば再帰的に閉じて、foldenableをセットする。
  • zm 折りたたみをより閉じる。foldenableをセットする。
  • zM すべての折りたたみを閉じる。foldenableをセットする。
  • zr 折りたたみをより開く。
  • zR すべての折りたたみを開く。
なにを折りたたむかは g:vimtex_fold_types で指定します。基本的には、g:vimtex_fold_types_defaultsで設定されている既定値を必要に応じて上書きします。定義は辞書の形式で行い、{キー:値}で定義していきます。

vimtex のヘルプファイルからキー(と値)の解説から一部引用して加筆翻訳しておきます。
  • 'preamble'
    プリアンブルを折りたたむかどうか。
    • { 'enabled' : 0/1 } -- 0:折りたたまない 1:折りたたむ
  • 'comments'
    複数行のコメントを折りたたむかどうか。デフォルトは無効。
    • { 'enabled' : 0/1 } -- 0:折りたたまない 1:折りたたむ
  • 'envs'
    環境を折りたたむかどうか。'document'環境は折り畳まれない。
    • { 'blacklist' : [] } -- 折りたたまない環境のリスト。正規表現が使える。
    • { 'whitelist' : [] } -- 折りたたむ環境のリスト。正規表現が使える。
  • 'envs_options'
    環境のオプション(複数行などの長いもの)を折りたたむかどうか。
    • { 'enabled' : 0/1 } -- 0:折りたたまない 1:折りたたむ
  • 'sections'
    section とパートを折りたたむかどうか。以下のキーがある。
    • { 'parse_levels' : 0/1} -- vimtex-toc で表示されるような感じでレベルを解析して折りたたむかどうか。デフォルトは 0。有効にするとリソースを食うし遅くなる。
    • { 'sections' : [] } -- 折りたたみする section のリスト。リストには正規表現が使える。デフォルトは [ 'part', 'chapter', 'section', 'subsection', 'subsubsection' ]
    • { 'parts' : [] } -- 折りたたみをするパートのリスト。リストには正規表現が使える。デフォルトは [ 'appendix', 'frontmatter', 'mainmatter', 'backmatter' ]
あとの詳細はヘルプファイル参照。 とりあえず以下の設定を使います。
let g:vimtex_fold_types = {
  \  'envs' : {
  \   'whitelist' : ['table', 'lstlisting'],
  \  },
  \  'comments' : {'enabled' : 1},
  \}

let g:vimtex_fold_enabled = 1

0 件のコメント:

コメントを投稿

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...