如何在 vimscript 中获取当前文件类型,例如 .vimrc 或常规插件脚本?线
echo &filetype
返回一个空字符串。
在一个函数中:
let current_filetype = &filetype
在命令行上:
:echo &filetype
&filetype没有文件类型时为空(显然)。如果您在没有加载缓冲区时尝试使用它,您将一无所获。
编辑
&filetype仅当您在编辑缓冲区时需要知道在运行时执行的函数中的当前文件类型时才有用。
&filetype仅在确定缓冲区为某种文件类型时才设置。执行时,脚本(vimrc、ftplugin 等)不会经历编辑时会经历的事情:没有文件类型检查,没有&filetype.
一个示例是根据文件类型在不同的外部应用程序中显示当前文件的函数。在任何其他上下文中使用&filetype都没有意义,因为它将是空的。
您需要考虑插件的时间。当你的插件脚本在 Vim 启动期间被 source 时,还没有加载缓冲区,所以&filetype是空的。因此,像这样
let s:formatprgvarname = "g:formatprg_".&filetype
不工作!(对于文件类型插件(in ~/.vim/ftplugin/),这是不同的;只有在检测到文件类型时才提供这些插件。但据我所知,您需要一个考虑当前文件类型的通用插件。)
相反,取消脚本局部变量s:formatprgvarname并&filetype 在操作点解决;即当您的自动格式化功能被触发时(通过映射或自定义命令)。如果您没有这样的触发器,您可以挂钩FileType事件并设置一个(最好是缓冲区本地)变量,然后:
autocmd FileType * let b:formatprgvarname = "g:formatprg_".&filetype