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