我的网站的 Apache 配置文件名为mywebsite.com
。显然,扩展.com
导致 vim 将错误的文件类型设置为 ,dcl
这也导致语法突出显示错误。我的所有其他主机配置文件都被正确识别为 Apache 文件。
我可以这样做,:set filetype=apache
而且一切看起来都很好,但是关闭 vim 并返回编辑后,文件类型又恢复原样dcl
。
除了重命名主机配置文件外,还有其他解决方案吗?有没有办法让 vim 记住这个特定文件的文件类型?或者更好的是,有没有办法纠正这个错误的文件类型检测?
答案1
一种方法是添加模式行到文件的开头或结尾。基本Vim 模式行看起来像这样:
# vim: ft=apache
Vim 会忽略注释字符本身。还有一种替代语法也允许使用以下注释字符:
/* vim: set ft=apache: */
Emacs 和一些其他编辑器-*- mode: apache -*-
则使用它。
如果您想要通过扩展名覆盖文件类型检测,您可以将以下内容添加到~/.vim/filetype.vim
:
augroup filetypedetect
au BufNewFile,BufRead *.com setl ft=apache
augroup END
(我不确定是否setf apache
或setl ft=apache
更好。)
请注意,检测并非完全错误,只是不准确。OpenVMS 操作系统使用.com
作为“命令”文件的扩展名 - 就像 shell 脚本或批处理文件一样 - 并且它们以 OpenVMS shell 语言 DCL 编写(数字命令语言)。
答案2
如何操作在 Vim 的内置参考手册中有描述
:help new-filetype
如 C.2 节所述,创建一个名为~/.vim/filetype.vim
以下内容的文件:
if exists("did_load_filetypes")
finish
endif
augroup filetypedetect
au! BufRead,BufNewFile *.com setfiletype apache
augroup END
.com
这将识别以文件类型 apache结尾的任何文件。如果您只希望mywebsite.com
被识别,请将该au
行更改为
au! BufRead,BufNewFile mywebsite.com setfiletype apache
答案3
作为以下两个答案的补充,我想分享我最后所做的事情,即修改主配置文件 /usr/share/vim/vim73/filetype.vim:
au BufNewFile,BufRead *.com 调用 s:BindzoneCheck('dcl')
到
au BufNewFile,BufRead *.com 调用 s:BindzoneCheck('apache')
我意识到这可能并不适合每个用户,特别是如果你打算编写 dcl 脚本,但就我而言,这没问题。
注意:我把这个问题从编辑转移到了正确的答案。在我写这篇文章的时候,我没有足够的声望来添加答案,但现在我有了。用户@romainl 提出了一些合理的原因 不是 按照我上面的问题的评论中的方式进行操作,但至少我认为这很有用,因为它有助于阐明这些文件类型关联的来源。