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