Запретить сохранение файла во время BufWritePre - PullRequest
2 голосов
/ 04 апреля 2011

У меня есть функция, которая выполняет проверку достоверности текущего файла (чтобы соответствовать стандартам кодирования моего работодателя).Я хотел бы вызвать эту функцию перед сохранением, т.е. используя BufWritePre.Тем не менее, я бы запретил сохранять файл, если он не выполняет мою функцию проверки.

Итак, возможно ли вырваться из автокоманды BufWritePre?

Я понимаю, что мог бы добиться этого путем перезапуска- отображение команды :write, как показано здесь , но я бы хотел избежать этого, если это вообще возможно, так как это выглядит несколько незаметно.

Заранее спасибо за ваши предложения.

Ответы [ 2 ]

4 голосов
/ 05 апреля 2011

Вы можете просто вызвать ошибку:

:autocmd BufWritePre *.txt throw "you may not"

Если вы хотите снова сохранять файлы .txt

:autocmd!
:source $MYVIMRC
1 голос
/ 05 апреля 2011

С :help BufWriteCmd

                            *BufWriteCmd*
BufWriteCmd         Before writing the whole buffer to a file.
                Should do the writing of the file and reset
                'modified' if successful, unless '+' is in
                'cpo' and writing to another file |cpo-+|.
                The buffer contents should not be changed.
                |Cmd-event|

Похоже, вы могли бы реализовать эту автокоманду и выполнять сохранение и сброс 'modified' только если сохранение разрешено.

I 'Я предполагаю, что вам придется использовать что-то вроде writefile(getline('^', '$')), чтобы на самом деле писать.

С другой стороны, вы можете сделать что-то вроде

  • отключить вашBufWriteCmd автокоманда
  • :write файл снова.Я не уверен, позволит ли это вам сделать это из обработчика BufWriteCmd.
  • повторно включите вашу автокоманду BufWriteCmd.Вероятно, вам следует поместить это в предложение :finally, чтобы обеспечить его выполнение, даже если возникают проблемы с записью.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...