2012-01-10 62 views
4

如果我有/etc/apache2/sites-available/www.example.com一个Apache文件,我设置的文件类型,像这样在vim中更改文件类型时会发生什么?

:set filetype=apache 

是什么呢?这是否改变了档案?它只反映在vim的实例中吗? vim会议?我可以手动设置文件类型,但随后vim警告我我处于只读模式(/etc/apache2需要root访问权限)。如果我以root身份打开vim,我不会得到警告,但是如果我离开并再次打开它(如正常或root),则filetype消失。如何让这个更加永久,至少从同一会话文件中调用时

回答

3

set filetype通过调用所有的FileType自动命令来改变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 

编辑:在我/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:StarSetfsetfiletypeapache如果文件类型与忽略模式不匹配。在我的系统上,:echo g:ft_ignore_pat将只显示被忽略的归档文件扩展名。 setfiletype确实set filetype,但只有一次。

因此,至少在我的系统中,*/etc/apache2/sites-*/*模式会捕获您的文件名并将其作为apache文件。

+0

这看起来像是一个非常糟糕的解决方案,因为它可能会不合理地变大。 – puk 2012-01-10 13:57:01

+0

vim知道如何通过使用扩展模式自动打开一些文件。特别是,'/ etc/apache2'中的'* .conf'文件被自动分配'filetype = apache'。你也可以为'/ etc/apache2/sites-available/*'制作一个包含模式。否则......好吧,强硬。 – Amadan 2012-01-10 14:01:59

+0

现在我检查了'/ etc/apache2/sites-available/*'应该已经默认为'filetype = apache' ... – Amadan 2012-01-10 14:04:04

0

filetype基本上让Vim改变'文件类型'的设置。这样做的方式是在更改文件类型时通过为FileType类别启动自动命令。如果FileType的自动命令适用于您的文件(但通常插件开发人员将其用于影响高亮显示的r/o类型更改,而不是文件内容),则这可能会更改您的文件。

如果您担心设置文件类型与文件摆弄你可以看到什么文件类型自动命令发出以下命令存在:

:au FileType 

要安装Apache的文件是你可以把东西阿帕奇文件类型像下面一样进入你的〜/ .vimrc:

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

我有点儿希望vim会话文件足够聪明以保存文件类型。 – puk 2012-01-10 14:04:46

相关问题