Answers:
首选的方法是创建一个~/.vim/filetype.vim
,如Vim FAQ 26.8中所述:help 43.2
并在其中解释:
更好的替代方法是在〜/ .vim目录(或在'runtimepath'选项指定的目录之一)中创建一个filetype.vim文件,并添加以下几行:
" my filetype file if exists("did_load_filetypes") finish endif augroup filetypedetect au! BufRead,BufNewFile *.x setfiletype c augroup END
编辑:
该did_load_filetypes
不该你带来任何麻烦; 更改后只需要重启Vim。
为了避免多次不必要地加载此文件,这是必要的,它是从基本文件($ VIMRUNTIME / filetype.vim)继承的:
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2014 Jun 12
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
finish
endif
let did_load_filetypes = 1
有关更多信息,请检查:help new-filetype
。
au!
在组中,即au! BufRead,BufNewFile *.py setfiletype python
在下面的行中声明au! BufRead,BufNewFile *.tpp setfiletype cpp
。但只有第二个实际上有效。编辑.py
文件不会将文件类型设置为python
。我不是vim专家,所以我可能会缺少一些东西。
au BufNewFile,BufRead *.py,*.pyw setf python
,因此您的第一行是无关紧要的。您的问题可能在其他地方。
"Editing .py files does not set the file type to python"
- :set ft
在这种情况下的输出是什么?如果不是python,请尝试按照Vim-FAQ 2.5中
人们还可以有:au BufRead,BufNewFile *.tpp setlocal filetype=cpp
在他们.vimrc
这样在打开一个文件.tpp
扩展名,文件类型设置为C ++
BufRead,BufNewFile
而不是BufEnter
?
BufRead,BufNewFile
,BufEnter
因为在docs(:help BufEnter
)中它指出:“ BufEnter:...。在BufReadPost自动命令之后开始编辑缓冲区时也会执行。” 其中BufReadPost是BufRead的同义词。另外,我不认为:
之前必须setlocal
这样做,因此我在回答中也忽略了这一点。(我可能认为这是完全错误的,很高兴听到进一步的讨论)
if
声明?如果我将其保留,则不会为我执行autocmds。