web-dev-qa-db-ja.com

LaTeXシンタックスハイライトでバッファをレンダリングするのが遅いVim

ハードドライブの障害を修正した後、Windows10を実行しているThinkpadX230TラップトップにGVIMをインストールしています。*.texファイルのバッファーのレンダリング速度を除いて、問題なく動作しています。問題は次のとおりです。syntax onを使用すると、ラテックスのバッファのレンダリングが非常に遅くなります。 「機能」のリストは次のとおりです。

  1. <C-f>を押すと、サイズ1920 * 1080(ピクセル単位)のバッファーを更新するのに数秒かかります。
  2. バッファのサイズを縮小すると、レンダリングが速くなります。それでも、私は少なくとも2番目の遅れを経験します。ラグの間、私は空白のバッファしか見ることができません。
  3. テキスト操作も遅いです。 oを押して下の新しい行を開始するだけでも、1秒の遅延が発生します。これは主に、その1行を追加した後のバッファ全体のレンダリングによるものです。後続のすべての行は、「新しい」位置に更新される必要があります。

サンプルスクリーンキャストとして: enter image description here

この投稿で言及されているすべての提案されたオプションを適用しました( https://stackoverflow.com/questions/8300982/vim-slow-running-latex-files )、それでも同じ遅いレンダリングが得られます速度。

X230Tでこの例外的な速度低下が発生しただけです。他の2台のデスクトップマシンでもまったく同じ_vimrcを使用しているため、レンダリング速度にわずかな遅れは発生しません。また、同じX230TラップトップにWindows7と8を以前にインストールした場合のレンダリングの問題も発生しませんでした。

最後に、ハードドライブの場合、X230TにSSDが搭載されていますが、これはこれまでのところかなりうまく機能しています。そして私は他の2台のデスクトップマシンの両方にHDDを持っています。

どんなアドバイスもとても役に立ちます!

どうもありがとう!

ではごきげんよう、

-リンフェン

5
llinfeng

問題は、vimの正規表現エンジンが非常に遅いことです。ラテックスは正規表現に対してかなり要求が厳しいと思います。

次のようにすることで、vimを少し速く取得できました。

:syn clear texSectionFold
:syn clear texPreamble

これらは、主な問題のある構文グループの正規表現でした。

私は次のようにしてそれらを見つけました:

:syntime on

ctrl+Lを何回も押して、vimが追いつくのを待ちます。次に:

:syntime report

これにより、次の出力が得られました。

  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  8.903872   1911   52      0.017387    0.004659  texSectionFold     \v%(%(\\begin\{document\}.*$\n)@<=^|\\section)
  4.979438   1859   0       0.016382    0.002679  texPreamble        \v%(\\documentclass)@=
  0.634906   1976   182     0.010863    0.000321  texEnvName         \v%(\\%(begin|end)\{)@<=\a+\*?\ze\}
  0.373173   1859   0       0.000880    0.000201  texArgsEnvNormReq  \v(\\begin\{%(theorem|lemma|proposition|corollary|conjecture|definition|remark|example|proof)\*?\}\s*)@<=\{
  0.317732   1859   0       0.000468    0.000171  texArgsEnvNormOpt  \v(\\begin\{%(theorem|lemma|proposition|corollary|conjecture|definition|remark|example|proof)\*?\}\s*)@<=\[
  0.223595   1859   0       0.000341    0.000120  texDimen           \v-?%(\.[0-9]+|([0-9]+(\.[0-9]+)?))%(pt|pc|bp|in|cm|mm|dd|cc|sp|ex|em)>
...

したがって、これら2つの正規表現は他の正規表現よりもはるかに高価であることがわかります。私は折り目を使用しないので、それを無効にすることに問題はありませんでした。前文を見つけるのがとても遅い理由がわかりません。

おそらくこれはあなたにも役立つでしょう、@ llinfeng。そうだといい!

編集:

Vimの起動時にこれらのsyn clearコマンドを実行するには、それらを~/.vim/after/syntax/tex.vimに配置する必要があります。構文定義はその時点ではまだロードされていないため、ftpluginファイルでは機能しません。

EDIT2:

上に投稿した構文グループのいくつかはプラグインからのものであることがわかりました。プラグインを無効にしても、他の構文グループの速度が遅いため、役に立ちません。イーシュ!

私の最終的な修正、および構文のハイライトから尋ねるのは、次のとおりです。

$ cat ~/.vim/after/syntax/tex.vim 
syn clear
syn match texComment   "%.*$"                                            
hi def link texComment  Comment

本当に速いです。

7
Edd Barrett

ThinkapdX230T自体の部分的なソリューション

問題の識別

@Eddが示唆しているように、:syntime onsyntime reportを使用して、最も時間のかかる構文を特定します。「group/region/match」を強調表示します。

部分的な解決策

次のURLにあるように、Vimディストリビューションのafterディレクトリ(私の場合はtex.vim)にc:\vim\vimfiles\after\syntax\をロードしました。

https://github.com/llinfeng/Vim/blob/X230T/vimfiles/after/syntax/tex.vim

結果

同じLaTeXファイルを使用すると、パフォーマンスが向上します。

Improved Performance

未解決の質問---構文を複製する方法-効率的に強調表示

tex.vimとして検出されるネイティブのc:\vim\vim80\syntax\tex.vimと比較すると、構文の色付けは理想的ではありません。

1
llinfeng

ファイルを開くときにvim -u NONE filename.texを使用して、.vimrcおよびその他のスクリプトがセッションにロードされないようにしました。これにより、問題が修正されました。

結論は、.vimrcファイルによって開始された何かが速度低下を引き起こすということです。

ファイルの一部を選択的に削除して、正確に原因を突き止めてください。バックアップを取ることを忘れないでください。

1
harrymc