2010-08-17 81 views
1

我有一个Windows目录(U:\S),其中包含的文件不能是 已更改。它们的只读位不能被设置,所以它们必须保持可写。VIM自动命令的正确模式?

由于我必须对VIM的某些文件内容进行修改,所以我想确保不会意外更改文件的内容。

于是,我把下面一行到我.vimrc conifugration文件:

autocmd InsertEnter u:/s/* call confirm("File should not be changed") 

似乎做工精细。

但后来,我也有目录中名为U:\supportTerminal包含文件 我变化。当我在该目录中编辑文件时,出于某种原因文件模式u:/s/*匹配,弹出警告。

我试着用一些方式玩弄,却找不着,只有内ü匹配:\秒,但内ü没有:\ supportTerminal

所以,我怎么可能去了解我想要什么?

+0

我不知道为什么这个模式匹配第二个目录,但是你可以根据你的描述使用'set readonly'(action:BufRead)而不是'call confirm(...)'。 – tux21b 2010-08-17 12:12:26

+0

我不能那样做,文件必须在所有时间都保持可写*。我也倾向于认为'set readonly'同样会被用来编辑u:\ supportTerminal中的文件。 – 2010-08-17 12:17:30

+0

哦,我明白了,'set readonly'实际上并没有设置文件系统只读位,而是一个内部文件系统。好的,在这种情况下,如果模式匹配正确,那将会起作用。 – 2010-08-17 12:39:40

回答

2

这使得一个错误,你应该报告给vim-dev at vim.org。在Linux中,我没有这种行为:它很好地匹配。

作为临时解决办法,

:au BufRead u:/s/* set readonly 
:au! BufRead u:/supportTerminal/* 

首先要把一般规律,然后删除一个目录作为例外。不确定这是否适用于Windows GVim。如果失败,其他的黑客是:

:au BufRead u:/supportTerminal/* set noreadonly 

PS:如上述意见所,设置VIM自己设定readonly更好地工作,以防止意外编辑。用户不能打开RO标志的:write文件,但可以通过设置noreadonly(如果需要)绕过它。