Есть программный проект, над которым я работаю, где все остальные используют размер табуляции 4, поэтому я считаю его наиболее простым set tabstop=4
в моем ~/.vimrc
. Тем не менее, я бы предпочел, чтобы это не влияло на каждый файл, который я редактирую - только на этот проект - скажем, на каждый файл в определенном каталоге (и его подкаталогах).
Есть ли способ, которым я могу легко условно установить переменные на основе префикса каталога файла?
Ответы:
Центральная конфигурация
Если вы можете централизованно настраивать локальные исключения, вы можете поместить такие autocmds в ваш
~/.vimrc
:С другой стороны, если вы хотите, чтобы конкретная конфигурация сохранялась вместе с проектом (и не хотите встраивать ее во все файлы с помощью modelines ), у вас есть следующие две опции:
Локальный конфиг со встроенным функционалом
Если вы всегда запускаете Vim из корневого каталога проекта, встроенный
разрешает чтение
.vimrc
файла из текущего каталога. Вы можете разместить:set ts=4 sw=4
команды там.Локальный конфиг через плагин
В противном случае вам нужна помощь плагина; на vim.org их несколько; Я могу порекомендовать плагин localrc , который позволяет даже локальную конфигурацию для конкретного типа файла .
Обратите внимание, что чтение конфигурации из файловой системы имеет последствия для безопасности; Вы можете хотеть
:set secure
.источник
autocmd
неработающего метода, убедитесь, что у вас нет символических ссылок на вашем пути - мне пришлось указать полный путь без символических ссылок, прежде чем он будет работать для меня (в OS X 10.9)Вы можете настроить vim для чтения других команд, используя команду
source
(so). Добавьте это в ваш~/.vimrc
- он ищет текущий каталог, и если файл .vimrc_proj не найден, он ищет .vimrc_proj в родительском каталоге.Затем добавьте любые пользовательские команды в
.vimrc_proj
конфигурационные файлы в соответствии с вашими проектами.источник
Вы можете использовать плагин для Vim, чтобы решить проблему в более общем виде, пытаясь обнаружить отступ.
Выбранный мной плагин - DetectIndent . Мне потребовалось некоторое время, чтобы протестировать все вилки плагина, чтобы найти тот, который соответствует моим потребностям. Оригинальный был очень близко, но не совсем, поэтому я сделал свою собственную вилку .
Для отладки очень полезно
:set verbose=1
и снова запустить плагин с:DetectIndent
источник
Одним из возможных решений, которое еще не было упомянуто, является переход на один уровень выше и реализация сценариев оболочки для конкретного проекта для запуска среды vim.
Это позволяет передавать специфичные для vim параметры с помощью параметра
-S
командной строки. Преимущество заключается в том, что он также позволяет настраивать другие аспекты среды, такие как настройки терминала или cscope.Например, скажем, у меня есть проект на C ++
foo
, для которого я хочу загрузить настройки файла vim~/.vim/projects/foo.vim
. Я также хочу настроить индекс cscope и запустить окно терминала, если команда вызывается из какого-либо инструмента быстрого запуска или ярлыка на рабочем столе. Чтобы открыть мою среду, у меня есть следующий скрипт, который называетсяvim-foo
:источник