ファイルのサイズと種類に応じて構文の強調表示を無効にする


16

多くの場合、vimを使用してさまざまなXMLファイルを編集する必要があります。vimはサイズが大きく異なります-数百行の構成ファイルから最大2GBの実稼働データファイルまで。巨大なファイルを扱う場合、構文の強調表示を有効にすることはもちろん非常に悪い考えです。したがって、ファイルがしきい値よりも大きい場合は無効にします。

シェルからvimを起動するとき構文が有効になる前にautocommandコマンドが実行されるように見えるため、これを直接使用して構文の強調表示を無効にすることはできませんでした:

" this autocmd has no effect except for the echo:
autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif

構文の強調表示をグローバルに無効にしてから、xml以外のすべてのファイルタイプに対して再度有効にし、ファイルがしきい値より大きくない場合にファイルタイプxmlに対して有効にすることができるという回避策を見つけました。

syntax off
autocmd Filetype * syntax off
autocmd Filetype * if &ft != 'xml' | syntax enable | endif
autocmd Filetype xml if getfsize(@%) < 1000000 | syntax enable | endif

これは機能しているように見えますが、間違っていると感じ、より多くのファイルタイプと条件でこれを実行したい場合は管理不能になります。さらに、すべてのバッファに影響します。特定の条件下で1つのバッファーで構文の強調表示を無効にする適切な方法は何ですか?



このQはよく書かれているが、この1の広範囲に(実際には、サブセット)と同じ地面をカバーするように見えるん:vi.stackexchange.com/questions/149/...
アンドリュー・フェリエ

4
@AndrewFerrier私はそれに対して議論したいと思います。もう1つの質問は、大きなファイルを処理するための一般的なヒントです。私の目的は、特定の一連の制限の下で、パズルの特定の部分を実装することです。答えを比較するだけです。他の質問に対する答えは、構文をオフにするように指示しますが、単一のファイルタイプの単一のバッファで動的に構文を実行する方法ではありません。したがって、それは私のはるかに具体的な問題を解決しません。それらは異なるものを要求し、異なる応答につながるため、関連していますが、重複していません。
l4mpi

l4mpi、それは公平なポイントです、私はファイルタイプのことも見つけていませんでした。ここで新しいベータの水域を部分的にテストするだけです!取られたポイント。重複投票を取り消します。
アンドリューフェリエ

回答:


11

derobertによるこのコメントは、私を解決へと導きました。

autocmd Filetype xml if getfsize(@%) > 1000000 | setlocal syntax=OFF | endif

これは、1つのバッファでのみ構文強調表示を確実に無効にするようです。

これautocmd BufReadPreは少し赤いニシンでした。コンテキストsyntax off では機能しBufReadPreますが、コンテキストでは機能しませんFiletype(もちろん、構文はグローバルに無効になります)。while setlocal syntax=OFFはコンテキストでは機能しませが、BufReadPreコンテキストでは機能しFiletypeます。


1

これautocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endifが必要なものです。


2
うーん、これは構文の強調表示を無効にしますが、大きなファイルを持つバッファだけでなく、すべてのバッファで無効になります。さらに&ft、このコンテキストでは設定されていないようですので、XMLファイルのみに制限する方法がわかりません。何か案は?
l4mpi

set syntax=OFF代わりに欲しいと思います。(または、それはsetlocalである必要がありますか?)
derobert

あなたはsyntax clear多分それから試してみたいかもしれません?
ドゥルヴァサーガル

@derobertはsetlocal syntax=OFF機能しますが、機能しませんBufReadPre *- Filetype xmlこのためにオートコマンドを元に戻す必要がありました。どのコマンドがどのオートコマンドコンテキストで機能するかは自明ではないようです
...-l4mpi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.