为什么`filetype on`在vim中没有检测到文件类型?

时间:2012-06-01 04:11:16

标签: vim ubuntu-12.04

我打开了vim而没有加载任何内容:

vim -V -u NONE

输入一行:

<?xml?>

跑完后:

:unlet did_load_filetypes
:filetype on

我检查当前缓冲区的文件类型:

:set ft?

打印filetype=


如果我输入

:unlet did_load_filetypes
:filetype detect

然后:set ft?将打印filetype=xml


在vim doc中:

Detail: The ":filetype on" command will load one of these files:                                    
                Amiga       $VIMRUNTIME/filetype.vim                                                
                Mac         $VIMRUNTIME:filetype.vim                                                
                MS-DOS      $VIMRUNTIME\filetype.vim                                                
                RiscOS      Vim:Filetype                                                            
                Unix        $VIMRUNTIME/filetype.vim                                                
                VMS         $VIMRUNTIME/filetype.vim                                                
        This file is a Vim script that defines autocommands for the                                 
        BufNewFile and BufRead events.  If the file type is not found by the                        
        name, the file $VIMRUNTIME/scripts.vim is used to detect it from the                        
        contents of the file.   

:filetype on:filetype detect之间的区别是什么? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

从手册:

To detect the file type again:
    :filetype detect
Use this if you started with an empty file and typed text that makes it
possible to detect the file type.

答案 1 :(得分:0)

$VIMRUNTIME/filetype.vim仅定义BufNewFileBufRead事件的自动命令。

运行:filetype on命令后,没有任何事件被触发,因此没有任何事件发生。要触发事件,您可以使用:w filename保存该事件,并使用:e!重新打开

我猜,:filetype detect会运行一些代码来触发BufNewFileBufRead事件。