Как заставить Vim адаптироваться к текущему стилю отступа редактируемого файла?

40

Я работаю над целым рядом проектов JavaScript. В большинстве этих проектов отступ для файлов JavaScript составляет 2 пробела, поэтому я установил ширину отступа по умолчанию. Однако это становится 1 или 4 в некоторых других проектах.

Есть ли способ попросить Vim изменить стиль отступа на основе стиля, уже используемого в текущем файле?

thameera
источник
Почему вы не добавляете такие настройки в .vimrc для определенного типа файла? :au BufEnter *.js :set shiftwidth=2, Это работает для всех проектов,
SibiCoder
1
@SibiCoder: потому что даже один и тот же тип файла может иметь разные стили отступов в разных проектах. (например: проекты, не принадлежащие одной и той же компании)
thameera
*.*это просто шаблон. Вы также можете использовать имя файла или путь. Или вы можете использовать аналогичную команду auto, как я дал, для каждого файла. Вы можете указать команде auto взять табуляцию текущего файла и указать путь к этому файлу. Это довольно легко.
SibiCoder

Ответы:

29

Чтобы добавить ответ @Undo выше. У Tim Pope также есть плагин, который пытается сделать то же самое в tpope / vim-sleuth

Дхрува Сагар
источник
5
По моему опыту, Sleuth работает немного лучше, чем deteindent, а также попытается определить правильные настройки отступа для новых файлов, просматривая другие файлы, расположенные поблизости в файловой системе.
Jamessan
@jamessan этого не знал, приятно знать.
Дхрува Сагар
2
Пожалуйста, ознакомьтесь с нашей политикой в ​​отношении рекомендаций по плагину и добавьте некоторые подробности о том, как именно использовать рекомендуемый плагин для решения проблемы.
200_success
15

Я не использовал его, но ciaranm / deteindent может быть тем, что вы ищете. Кажется, что он активен (последний раз обновлен 25 дней назад) и выглядит так, как будто он делает то, что вы хотите:

Плагин Vim, для автоматического определения настроек отступа. Этот плагин добавляет команду: DetectIndent, которая пытается интеллектуально установить параметры 'shiftwidth', 'expandtab' и 'tabstop' на основе существующих настроек, используемых в активном файле.

Отменить
источник
Этот плагин больше не находится в активной разработке. (Последнее обновление было
сделано