#vim #neovim
#vim #neovim
Вопрос:
Я пытаюсь выполнить команду yapf для форматирования моего файла python при его сохранении, поэтому я создал функцию для вызова этой команды:
function Format_python_file()
silent :!yapf --style="{based_on_style: pep8, indent_width: 4}" -i %
silent :e %
endfunction
autocmd BufWritePost *.py call Format_python_file() <afile>
Комментарии:
1. конечно, кажется, что вы могли бы выяснить, какая строка в вашей функции вызывает эту команду. Вы пробовали это?
2. Я думаю, что это первая строка, в которой выполняется команда yapf, но я не знаю, как исправить.
Ответ №1:
Проблема в вашей autocmd
строке, у вас там есть завершающий <afile>
символ.
На самом деле, сообщение, которое я вижу, довольно четко указывает на это:
Error detected while processing BufWritePost Autocommands for "*.py":
E488: Trailing characters: <afile>
Вы должны просто удалить <afile>
, сама функция уже работает в текущем буфере, не нуждается в каком-либо аргументе или другой ссылке на текущий файл.
Также обратите внимание, что хорошей практикой является помещение ваших autocmd
символов внутрь augroup
, которое сначала очищается. Таким образом, если вы перезагрузите свой исходный файл (vimrc или иначе), он не создаст дубликаты autocmd
.
Более чистым способом настройки этого autocmd
было бы:
augroup python_yapf
autocmd!
autocmd BufWritePost *.py call Format_python_file()
augroup END
Комментарии:
1. Это работает, но если я сохраняю файл и выхожу из vim с помощью 😡 или ZZ, почему это не работает?
2. Работает ли это, если вы используете
<afile>
в своей команде yapf? Как в:silent :!yapf --style="{based_on_style: pep8, indent_width: 4}" -i <afile>