.vimrcや通常のプラグインスクリプトなど、vimscriptで現在のファイルタイプを取得するにはどうすればよいですか?この線
echo &filetype
空の文字列を返します。
関数内:
let current_filetype = &filetype
コマンドラインで:
:echo &filetype
&filetypeファイルタイプがない場合は空です(明らかに)。バッファがロードされていないときに使用しようとすると、何も得られません。
編集
&filetypeバッファを編集しているときに、実行時に実行される関数で現在のファイルタイプを知る必要がある場合にのみ役立ちます。
&filetypeバッファが何らかのファイルタイプであると判断された場合にのみ設定されます。実行されると、スクリプト (vimrc、ftplugin など) は、編集時の処理を実行しません: ファイルタイプのチェックなし、&filetype.
例として、ファイルの種類に応じて現在のファイルを別の外部アプリに表示する関数があります。空になるため、他のコンテキストで使用&filetypeしても意味がありません。
プラグインのタイミングを考慮する必要があります。Vim の起動時にプラグイン スクリプトが読み込まれると、バッファはまだロードされていないため、&filetype空になります。したがって、このようなもの
let s:formatprgvarname = "g:formatprg_".&filetype
動作しません!((の)ファイルタイププラグイン~/.vim/ftplugin/の場合、これは異なります。これらは、ファイルタイプが検出された場合にのみ供給されます。しかし、私が理解しているように、現在のファイルタイプを考慮する汎用プラグインが必要です。)
代わりに、スクリプト ローカル変数を廃止し、アクションの時点でs:formatprgvarname解決します。つまり、オートフォーマット機能がトリガーされたとき (マッピングまたはカスタム コマンドによって)。そのようなトリガーがない場合は、イベントにフックして (できればバッファーローカル) 変数を設定できます。&filetype FileType
autocmd FileType * let b:formatprgvarname = "g:formatprg_".&filetype