Установите Vim shiftwidth и tabstop на основе каталога

У меня есть проект, над которым я сейчас работаю, где стандартом кодирования является использование отступов в 2 раза. Однако в других проектах я использую 4 отпечатка в пространстве.

Есть ли простой способ сказать vim, что все файлы в определенном каталоге должны иметь tabstop из двух пробелов?

Ответ 1

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

Ответ 2

Используйте autocmd, который соответствует каталогу и устанавливает любые параметры, которые вам нужны:

au BufRead,BufNewFile,BufEnter /path/to/dir/* setlocal ts=2 sts=2 sw=2

Это также относится к файлам в подкаталогах.

Как указывает Инго Каркат, такие команды должны использовать setlocal вместо set, чтобы быть конкретным для буферов.

Ответ 3

Если вы не беспокоитесь о центральной конфигурации исключений в каталоге проекта, решение :autocmd от Nikita Kouevda прост и эффективен. С другой стороны, если вы хотите, чтобы конкретная конфигурация была сохранена в проекте (и не хотите вставлять ее во все файлы с помощью modelines), у вас есть следующие две опции:

Если вы всегда запускаете Vim из корневого каталога проекта, встроенный

:set exrc

позволяет считывать файл .vimrc из текущего каталога. Вы можете разместить там команды :set ts=2 sw=2 et.

В противном случае вам понадобится помощь плагина; на vim.org есть несколько; Я могу порекомендовать локальный плагин.

Ответ 4

Некоторое время назад я написал плагин именно для этих нужд: Vimprj. Это плагин для управления опциями для разных проектов.

Один парень даже написал хорошую статью об этом.

В скором времени вам нужно создать файл .vimprj в корне вашего проекта (или .vimprj с некоторыми .vim файлами), и каждый раз, когда вы переключаетесь на этот проект, этот файл или каталог .vimprj будет быть источником.

Подробнее прочитайте страницу плагина, и не стесняйтесь спрашивать меня, есть ли у вас какие-либо проблемы с этим плагином.

Ответ 5

embear/vim-localvimrc https://github.com/embear/vim-localvimrc работал хорошо.

Я создаю файл .lvimrc, содержащий:

setlocal noexpandtab
setlocal shiftwidth=8
setlocal tabstop=8

и он превосходит по умолчанию конфигурацию autocmd FileType от моего .vimrc для каждого файла дочернего каталога, содержащего .lvimrc.

Источники плагинов каждый .lvimrc он находит в родительском каталоге, с корневой стороны, так что чем глубже .lvimrc, тем больше приоритет.

EditorConfig https://github.com/editorconfig/editorconfig-vim - отличный вариант, если вы управляете деревом источника, для параметров, которые каждый должен использовать, поскольку он содержит агностические параметры редактора (и реализацию Vim).