如何保存被错误检测的文件的 VIM 文件类型设置?

如何保存被错误检测的文件的 VIM 文件类型设置?

我的网站的 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 apachesetl 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 提出了一些合理的原因 不是 按照我上面的问题的评论中的方式进行操作,但至少我认为这很有用,因为它有助于阐明这些文件类型关联的来源。

相关内容