防止在Vim中保存具有特定名称的文件

dis*_*dng 16 vim autocmd

我打字很快,并意识到有时我不小心保存了一个名为;或的文件:(我打字:wq,有时会引入拼写错误).

有没有办法编写一个拒绝保存匹配某些名称的文件的宏?

ib.*_*ib. 17

一个简单而有效的解决方案是定义一个自动命令匹配可能错误输入的文件名,它会发出警告并终止保存.

:autocmd BufWritePre [:;]* throw 'Forbidden file name: ' . expand('<afile>')
Run Code Online (Sandbox Code Playgroud)

请注意,该:throw命令是使Vim停止写入缓冲区内容所必需的.

为了避免E605因未捕获的异常而导致错误,可以使用块中:echoerr运行的命令发出错误try.(:echoerrtry构造内部调用时,将其错误消息作为异常引发.请参阅:help :echoerr.)

:autocmd BufWritePre [:;]*
\   try | echoerr 'Forbidden file name: ' . expand('<afile>') | endtry
Run Code Online (Sandbox Code Playgroud)

如果需要保存名称与上述自动命令中使用的模式匹配的文件,可以相应地添加一个写入命令:noautocmd或相应地设置该eventignore选项(参见:help :noautocmd:help eventignore获取更多详细信息),例如

:noa w :ok.txt
Run Code Online (Sandbox Code Playgroud)