Предотвращение сохранения файлов с определенными именами в Vim

Я набираю очень быстро и понимаю, что иногда я случайно сохраняю файл с именем ; или : (я печатаю :wq, и иногда появляется опечатка).

Есть ли способ написать макрос, который отклоняет сохранение файлов, соответствующих определенным именам?

Ответы

Ответ 1

Простым, но эффективным решением было бы определить соответствие автокоманд потенциально ошибочные имена файлов, которые вызывают предупреждение и прекращают сохранение.

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

Обратите внимание, что команда :throw необходима, чтобы Vim прекратил писать содержимое буфера.

Чтобы избежать ошибки E605 из-за неперехваченного исключения, один может выдавать ошибку с помощью команды :echoerr в блоке try. (:echoerr вызывает сообщение об ошибке как исключение при вызове изнутри a try. См. :help :echoerr.)

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

Если вам когда-либо понадобится сохранить файл с именем, соответствующим шаблону, используемому в указанная выше автоматическая команда, можно добавить команду записи с помощью :noautocmd или установите опцию eventignore (см. :help :noautocmd и :help eventignore для более подробной информации), например

:noa w :ok.txt