6

.vimrcや通常のプラグインスクリプトなど、vimscriptで現在のファイルタイプを取得するにはどうすればよいですか?この線

echo &filetype

空の文字列を返します。

4

2 に答える 2

3

関数内:

let current_filetype = &filetype

コマンドラインで:

:echo &filetype

&filetypeファイルタイプがない場合は空です(明らかに)。バッファがロードされていないときに使用しようとすると、何も得られません。

編集

&filetypeバッファを編集しているときに、実行時に実行される関数で現在のファイルタイプを知る必要がある場合にのみ役立ちます。

&filetypeバッファが何らかのファイルタイプであると判断された場合にのみ設定されます。実行されると、スクリプト (vimrc、ftplugin など) は、編集時の処理を実行しません: ファイルタイプのチェックなし、&filetype.

例として、ファイルの種類に応じて現在のファイルを別の外部アプリに表示する関数があります。空になるため、他のコンテキストで使用&filetypeしても意味がありません。

于 2013-03-01T10:41:57.480 に答える
2

プラグインのタイミングを考慮する必要があります。Vim の起動時にプラグイン スクリプトが読み込まれると、バッファはまだロードされていないため、&filetype空になります。したがって、このようなもの

let s:formatprgvarname = "g:formatprg_".&filetype

動作しませ!((の)ファイルタイププラグイン~/.vim/ftplugin/の場合、これは異なります。これらは、ファイルタイプが検出された場合にのみ供給されます。しかし、私が理解しているように、現在のファイルタイプを考慮する汎用プラグインが必要です。)

代わりに、スクリプト ローカル変数を廃止し、アクションの時点でs:formatprgvarname解決します。つまり、オートフォーマット機能がトリガーされたとき (マッピングまたはカスタム コマンドによって)。そのようなトリガーがない場合は、イベントにフックして (できればバッファーローカル) 変数を設定できます。&filetype FileType

autocmd FileType * let b:formatprgvarname = "g:formatprg_".&filetype
于 2013-03-01T12:23:30.457 に答える