Почему vim возвращает E488: символы трассировки в мою функцию?

#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>