在vim中更改文件类型时会发生什么情况?

在vim中更改文件类型时会发生什么情况?,vim,file-type,Vim,File Type,如果我在/etc/apache2/sites available/www.example.com中有一个apache文件,我将其文件类型设置为 :set filetype=apache 那有什么用?这会改变文件吗?它是否只反映在vim的实例中?vim会议?我可以手动设置文件类型,但vim会警告我处于只读模式(/etc/apache2需要root访问)。如果我以root用户身份打开vim,我将不会得到警告,但是如果我离开并再次打开它(以普通用户或root用户身份),文件类型将消失。如何使其更持久

如果我在
/etc/apache2/sites available/www.example.com
中有一个apache文件,我将其文件类型设置为

:set filetype=apache

那有什么用?这会改变文件吗?它是否只反映在vim的实例中?vim会议?我可以手动设置文件类型,但vim会警告我处于只读模式(
/etc/apache2
需要root访问)。如果我以root用户身份打开vim,我将不会得到警告,但是如果我离开并再次打开它(以普通用户或root用户身份),文件类型将消失。如何使其更持久,至少在从同一会话文件调用时,通过调用所有
文件类型
自动命令,设置文件类型更改vim处理文件的方式。它不会持续下去。如果要始终使用
filetype=apache
打开该文件,请尝试将其添加到
中。vimrc

au BufRead,BufNewFile /etc/apache2/sites-available/www.example.com set filetype=apache
您可以在以下网站了解更多信息:

:help 'filetype'
:help filetypes
:help :autocmd
:help .vimrc
编辑:如my
/usr/share/vim/vim73/filetype.vim中所示:

au BufNewFile,BufRead access.conf*,apache.conf*,apache2.conf*,httpd.conf*,srm.conf* call s:StarSetf('apache')
au BufNewFile,BufRead */etc/apache2/*.conf*,*/etc/apache2/conf.*/*,*/etc/apache2/mods-*/*,*/etc/apache2/sites-*/*,*/etc/httpd/conf.d/*.conf*        call s:StarSetf('apache')
如果文件类型与忽略的模式不匹配,
s:StarSetf
setfiletype
转换为
apache
。在我的系统上,
:echo g:ft\u ignore\u pat
将仅显示已忽略的存档文件扩展名<代码>设置文件类型
执行
设置文件类型
,但仅执行一次


因此,至少在我的系统上,
*/etc/apache2/sites-*/*
模式将捕获您的文件名并使其成为一个
apache
文件。

文件类型基本上允许Vim更改“文件类型”的设置。它执行此操作的方式是在更改文件类型时为文件类型类别触发auto命令。如果文件类型的自动命令适用于您的文件,则这可能会更改您的文件(但插件开发人员通常将其用于影响高亮显示的r/o类型更改,而不是文件内容)

如果您担心设置文件类型会影响您的文件,您可以通过发出以下命令查看存在哪些文件类型自动命令:

:au FileType
要将apache文件设置为apache文件类型,可以将以下内容放入~/.vimrc中:

:au BufRead /etc/apache2/sites-available/* set ft=apache

这似乎是一个非常糟糕的解决方案,因为它可能会变得不合理地大。vim知道如何使用扩展模式自动打开大量文件。特别是,
/etc/apache2
中的
*.conf
文件会自动分配给
filetype=apache
。您还可以为
/etc/apache2/sites/*
创建一个包含模式。否则。。。好吧,很难。现在我检查了,
/etc/apache2/sites available/*
应该已经默认为
filetype=apache
…我有点希望vim会话文件能够足够智能地保存文件类型。