Как настроить autocmd в vimrc для запуска только с определенными типами файлов?
Объяснение:
Недавно я получил файл.vimrc из репозитория git и до сих пор считал его невероятно полезным. Один из полезных инструментов, поставляемых с ним, заключается в том, что он автоматически удаляет завершающие пробелы при записи файла.
Тем не менее, я только начал использовать markdown, который дает четкий формат для написания текстовых файлов, облегчая преобразование этих файлов в различные типы, такие как html.
Проблема в том, что уценка использует два пробела для обозначения новой строки. Мой.vimrc автоматически удаляет их. Я нашел autocmd, который делает это. Это:
autocmd BufWrite * :call DeleteTrailingWS()
DeleteTrailingWS - это функция, которая фактически удаляет пустое пространство.
Мой вопрос:
Как мне изменить это так, чтобы он запускал / устанавливал этот autocmd только в том случае, если тип файла не уценен? (.md) Пожалуйста, объясните таким образом, чтобы я мог вызывать универсальные функции, а не только ту, что выше. Кроме того, как вы делаете это с несколькими типами файлов. Например, запустите / установите эту команду, только если файл не имеет тип.md,.abcd или.efgh?
Спасибо вам всем.
4 ответа
Просто проверьте в автокоманде тип файла:
autocmd BufWrite * if &ft!~?'markdown'|:call DeleteTrailingWS()|endif
Ответ Кристиана работает хорошо, если вы хотите, кроме некоторых типов файлов. В другом случае, определяя autocmds только для некоторых типов файлов, обычный подход заключается в определении локальных для буфера autocmds через
:autocmd BufWrite <buffer> call ...
это может быть сделано с помощью других предварительно :autocmd Filetype ... autocmd ...
или плагин типа файла в ~/.vim/ftplugin/...
Для надежного решения взгляните на мой плагин DeleteTrailingWhitespace. Вместе с плагином ShowTrailingWhitespace он уже обнаруживает типы файлов, такие как Markdown (настраиваемым способом), а затем добавляет исключение (более детализированное, чем простое отключение; т. Е. Допускает два или более пробелов, но при этом выделяет конечные вкладки в Markdown).
*
В команде auto указывается тип файла для запуска, поэтому вам просто нужно заменить его на *.md
,
autocmd BufWrite *.md :call DeleteTrailingWS()