質問

次のテキストを含む WrongFileTypeDetection.R というファイルがあります。

# This file is sometimes wrongly detected as a conf file

また、_vimrc の 2 つのバージョンがありますが、それらは完全に同一であると考えられていました。ただし、最初のバージョンを使用すると、.R で終わるすべてのファイルを filetype=r に設定するように指定したにもかかわらず、上記のファイルは誤って「conf」ファイルとして検出されます。2 番目のバージョンに変更すると (augroup 定義の後ろに「構文」を移動)、検出は再び正しく機能します。これは、 のみ 私が持っている設定 (デバッグ中に標準の vimrc を移動しました)。

最初のバージョン:

syntax on
augroup filetypedetect
    autocmd! BufRead,BufNewFile *.r,*.R     setfiletype r
augroup END

2 番目のバージョン:

augroup filetypedetect
    autocmd! BufRead,BufNewFile *.r,*.R     setfiletype r
augroup END
syntax on

vimrc は 2 つのファイルの特定の順序に非常に敏感であるようです。いずれにせよ、行の 1 つがずっと後で実行される自動コマンドであることを考えると、これはなぜでしょうか?これは Vim のバグですか、それとも私が理解していない機能ですか?

役に立ちましたか?

解決

あなたの問題に簡単な答えは、これらの行がすべてであなたのvimrcであってはならないということです。これを処理する公式にサポートされている方法は、以下を含む、あなたのfiletype.vimディレクトリに.vimファイルを作成されます:

" my filetype file
if exists("did_load_filetypes")
  finish
endif

augroup filetypedetect
  au! BufRead,BufNewFile *.r setfiletype r
augroup END

あなたのコードはそれがないどのように動作している理由としては、それは実際には非常に少し複雑<のhref = "https://stackoverflow.com/questions/1291955/very-strange-behavior-with-vim-syntaxよります-and-ファイルタイプ検出/ 1291971#1291971" >あまりにも多くのPHPの答えに@を意味します。

あなたのvimrcの最初のバージョンでは、ファイルタイプ検出は、あなたのsyntax onラインで初期化されます。これは.r拡張子を持つファイルが開かれたときに起動するようにautocmdを設定することにより動作し、このautocmdはfiletype.vimは、関数のs:FTr()を呼び出します。

しかし、あなたのautocmd!ラインは、この既存のautocmd 1 s:FTr()機能が実行されることはありませんので、 2 上書きされます。 setfiletypeコマンドは、ファイルタイプが既に 3 に設定されていると思うので、あなたのautocmdはその後火災、それのんではないのは、ファイルタイプを設定します。

ファイルタイプは、まだ実際に設定されていないため、

次に、Vimはファイルの内容に基づいていずれかを割り当てることを試み、confタイプに割り当ててしまう 4

このすべてのための最高の参照が:help filetypeです。そして、特にあなたのケースの:help new-filetype:help remove-filetypeインチ:verboseコマンドは、どのようなスクリプトによって設定された設定の把握のために非常に便利です。

<サブ> 1:!のため。あなたはこの!を削除した場合は、正しく設定されているファイルタイプを見つけるだろう。そして、あなたは、ファイルが1種類に設定できるようにすること(およびそのファイルタイプのすべての設定を適用)し、その後、別のに変更することになるので、これは、しかし、正しい解決策ではありません。二ファイルタイプは、すべてのこれらの設定を上書きしない場合は、いくつかはあなたが望むものではないかもしれませんこれは、残ることがあります。

<サブ> 2:あなたは、2つの異なるのvimrcファイルを使用しているとき:set autocmd BufRead *.rを実行してみてください。所与の出力の違いに注意してください。

<サブ> 3::help setfiletypeを参照してください。あなたのvimrcの最初のバージョンでsetfiletype rにラインset ft=rを変更した場合、ファイルタイプは、がRに設定されることに注意してください。しかし、これが最善の解決策ではない理由のために脚注1を参照してください。

<サブ> 4:...コメントされたコードの行に:

「この最後のを確認し、それだけで推測です」

他のヒント

あなたの最初のバージョン、の上の構文でファイルタイプ検出をトリガしているのあなたの自動コマンドが追加されました前に。

このサイトによると

http://www.build-doctor.com/2008/06/04/how-to-set-the-filetype-in​​-vim-when-the-extension-doesnt-match/

.vimrc ファイルに 2 行のコードを追加するだけです。

au BufRead,BufNewFile *.R set filetype=r
au BufRead,BufNewFile *.r set filetype=r
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top