VIM自动命令的正确模式?

VIM自动命令的正确模式?,vim,Vim,我有一个windows目录U:\S,其中包含不可删除的文件 改变。无法设置它们的只读位,因此它们必须保持可写状态 由于我必须使用VIM定期查看文件的某些内容,因此我希望确保不会意外更改文件的内容 因此,我在.vimrc conifuglation文件中放入了以下行: autocmd InsertEnter u:/s/* call confirm("File should not be changed") 这似乎很管用 但是,我还有一个名为U:\supportTerminal的目录,其中包含文件

我有一个windows目录U:\S,其中包含不可删除的文件 改变。无法设置它们的只读位,因此它们必须保持可写状态

由于我必须使用VIM定期查看文件的某些内容,因此我希望确保不会意外更改文件的内容

因此,我在.vimrc conifuglation文件中放入了以下行:

autocmd InsertEnter u:/s/* call confirm("File should not be changed")
这似乎很管用

但是,我还有一个名为U:\supportTerminal的目录,其中包含文件 我必须改变。当我编辑该目录中的文件时,出于某种原因,文件模式u:/s/*匹配,并弹出我的警告

我试着使用一些模式,但我发现没有一个模式只在u:\s中匹配,而在u:\supportTerminal中不匹配


那么,我怎样才能实现我想要的呢?

这就产生了一个bug,您应该向vim.org上的vim dev报告这个bug。在linux中,我没有这种行为:它非常匹配

作为临时解决办法

:au BufRead u:/s/* set readonly
:au! BufRead u:/supportTerminal/* 
应该首先制定一般规则,然后作为例外删除one dir。不确定这是否在Windows GVim中正常工作。如果失败,其他黑客将:

:au BufRead u:/supportTerminal/* set noreadonly

PS:如上所述,设置vim自己的设置readonly可以更好地防止意外编辑。用户无法:在启用RO标志的情况下写入文件,但如果需要,可以通过设置noreadonly来避免此问题。

我不知道该模式为什么与第二个目录匹配,但您可以使用set readonly action:BufRead而不是call confirm。。。根据你的描述。我不能这样做,文件必须始终保持可写。我还倾向于认为,在u:\supportTerminal中编辑文件时,同样会触发set readonly。哦,我明白了,set readonly实际上并没有将文件系统设置为只读位,而是一个内部位。好的,在这种情况下,如果模式匹配正确,那就行了。