16

我打字非常快,有时不小心保存了一个名称由单个 ;或 :. (有时在我键入:wq 命令时会出现拼写错误。)

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

4

1 回答 1

17

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

:autocmd BufWritePre [:;]* throw 'Forbidden file name: ' . expand('<afile>')

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

为了避免由于未捕获的异常而导致错误,可以使用在块中运行的命令E605发出错误— <code>:echoerr 在从构造内部调用时将其错误消息作为异常引发(请参阅参考资料)。:echoerrtrytry:help :echoerr

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

如果需要保存名称与上述自动命令中使用的模式匹配的文件,可以在写入命令前添加:noautocmd或相应地设置eventignore选项(请参阅 :help :noautocmd:help eventignore了解详细信息),例如:

:noa w :ok.txt
于 2011-06-02T07:03:44.023 回答