Как настроить 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()
Другие вопросы по тегам