vimtexがfiletypeで起動しない。

Neovim-Qtとlervag/vimtexで\(\rm\LaTeX\)文書をドラッグ&ドロップするとちゃんと動いていたのに、起動しなくなってしまいました。

検索してみたところ、vimtexのhelpになにか書いてありました。

COMMENT ON INTERNAL TEX PLUGIN                        *vimtex-comment-internal*

Vim ships with some LaTeX support out of the box. In particular, it provides
good syntax highlighting (|ft-tex-syntax|), indentation (see the source file
$VIMRUNTIME/indent/tex.vim for the documentation), and some sensible options
(|ft-tex-plugin|).

When |vimtex| is active, it will be used as the main |ftplugin|. It will
define the same set of sensible settings as the internal plugin. However,
|vimtex| does not provide its own syntax, instead it adds a few minor
improvements to |ft-tex-syntax|, see |vimtex-syntax|. |vimtex| also provides its
own indentation plugin, see |vimtex-indent|.

Vim will generally autodetect filetypes automatically. In most cases this
works as expected, however, in some cases it will detect a file with the `tex`
suffix as a |plaintex|. To prevent this, one may set the option
|g:tex_flavor| in ones `vimrc` file, that is: >

  let g:tex_flavor = 'latex'

Vimはすぐに使えるようにいくつかのLaTeXサポート機能が同梱されています。とりわけ、すぐれたシンタックスハイライト(ft-tex-syntax)、インデンテーション、気の利いたオプション(ft-tex-plugin)を提供しています。

vimtexがアクティブならば、メインのファイルタイププラグインとして使用されます。これは内部プラグインの気の利いた設定と同等のことを定義します。けれども、vimtexは独自のシンタックスを提供する代わりに、ft-tex-syntaxにいくつかの些細な改良を加えています。vimtexはまた独自のインデンテーションを提供しています(vimtex-indent)。

Vimは一般的にファイルタイプを自動的に検出します。ほとんどの場合これは期待通りに動作しますが、いくつかの場合には"tex"拡張子のファイルタイプをplaintexと検出してしまいます。これを防ぐには、g:tex_flavorオプションを設定すると良いかもしれません。

とのことです。
ところがこれをやってみても、どうにもうまく検出してくれません。もしかしたらvimtexのオプション設定でどこかミスがあって、それがvimtexモードになるのを阻害しているのかもしれませんが…。

vimtexの便利な機能が使えないのは結構困るのですが、とりあえず保存するたびにコンパイルしてくれるようにしたいので、以下のようにしました。

latexmk -pvc -view=none %1
というバッチファイルを作成し、ルートtexファイル(\includeなどでいくつかのファイルを読み込んでいる場合の一番親ファイル)を食わせると、子ファイルに変更があったときでも自動でコンパイルを始めてくれます。

それからこんな記事を見つけました。
Writing LaTeX in Neovim with Vimtex
あとで読んでみようと思います。

Neovim+vimtexでのテキストアライン。

テキストアライン、あるいは桁揃えですが、Vim/Noevimでもいくつかのプラグインがあります。Align とか vim-easy-align とか。

ただ、自分で使ってみた感じでは godlygeek/tabular が使いやすかったので、これの使い方をメモです。

tabularでは、範囲指定したうえでどの文字を桁揃えに使用するかを正規表現で指定します。

たとえば現在行から5行分を、'&'文字で桁揃えしたい場合には、
:.,+5Tab /&
とします。この場合、各カラムは左寄せです。

','で区切られた各カラムを中央寄せにし、前後に最低1文字以上のスペースを入れる場合には、
:Tab /,/c1
とします。

','で区切られた各カラムを右寄せにし、','との間に1文字の空白を入れる場合には、
:Tab /,/r1
とします。

桁揃えの指定は正規表現なので、
:Tab /[,|&]
などとすれば ',''|''&'の3つの文字を桁区切りに指定できます。

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

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

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