Vim文件类型检测

6
Vim可以检测内容的缓冲区的文件类型,但是这个缓冲区还没有命名(未保存)吗?:filetype detect功能不太好。
4个回答

6
大部分文件类型是通过它们的文件名(和/或位置)来检测的,一些文件类型(主要是带有#! shebang行的文件)是通过它们的内容来检测的。
如果您不想保存缓冲区,但想进行检测,可以通过:file name.ext命名缓冲区。然后,使用:filetype detect命令进行检测。
如果您只想快速进行语法高亮(和相应的文件类型设置),只需手动设置文件类型即可,使用:setf name命令。

是的。问题在于我主要对Fortran文件类型感兴趣,它有两个变体(以这个名称命名)-现代和另一个。选择哪一个取决于一些预设的变量,这些变量取决于(我不知道取决于什么)。因此,简单地选择文件类型对我来说并不起作用。我需要Vim来完成它。而且我正在尝试避免命名文件。 - Rook
好的,现在你把两件事情混淆了。未保存缓冲区的检测应该已经得到解答了。对于Fortran变体,似乎Vim已经有了精细的检测;请查阅:help ft-fortran-syntax。如果这仍然不适合你,你就需要编写/扩展检测,参见:help new-filetype-scripts - Ingo Karkat

2

您可以手动完成此操作。

:set filetype=EXT

请注意,EXT是您想要的文件类型的扩展名,而不一定是语言本身的名称。

0

正如vim的帮助文档所说,它在某些情况下可以工作,例如如果您键入

#!/bin/sh

然后它将被检测为sh脚本。


不是这样的;我是在一般情况下询问ft检测。 - Rook

0
如果文件的第一行包含#!,那么很容易处理。
例如:
" finish if the filetype was detected
if did_filetype()
    finish
endif

" Ruby & Python ftplugins
if getline(1) =~ '^#!.*ruby'
    setfiletype ruby
elseif getline(1) =~ '^#!.*python'
    setfiletype python
endif

1
不是这样的;我是在一般情况下询问ft检测。 - Rook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接