Как загрузить другой файл .vimrc для разных рабочих каталогов?

У меня есть другой вариант для каждого рабочего каталога. Я не хочу, чтобы set эти параметры каждый раз, когда я работаю. Я знаю, что могу добавить файл vimrc для параметров, но я не хочу использовать ту же конфигурацию в каждом каталоге. Как я могу это сделать?

Пример:

Для проекта javascript я хочу загрузить настройки из ~/.vimrc_js

Для проекта Python я хочу загрузить настройки из ~/.vimrc_py

Ответы

Ответ 1

Если в каждом проекте используется отдельный язык, встроенный механизм plug-intypety (ftplugin), описанный Джейми Шембри, будет работать нормально. Если вам действительно нужны разные настройки для файлов того же типа, прочитайте:

Центральная конфигурация

Если вы можете настроить локальные исключения централизованно, вы можете поместить такие autocmds в свой ~/.vimrc:

:autocmd BufRead,BufNewFile /path/to/dir/* setlocal ts=4 sw=4

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

Локальная конфигурация со встроенной функциональностью

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

:set exrc

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

Локальная конфигурация через плагин

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

Обратите внимание, что чтение конфигурации из файловой системы имеет последствия для безопасности; вы можете захотеть :set secure.

Ответ 2

Плагин Filetype

Это то, что вы, вероятно, ищете, и очень аккуратный подход. Вам нужно установить filetype plugin on в свой vimrc, чтобы заставить это работать. Затем файл должен быть создан в ~/.vim/ftplugin/<language>.vim, который будет загружаться автоматически для любых буферов с использованием этого языка.

Например, вместо того, чтобы писать ваши настройки JavaScript на ~/.vimrc_js, напишите их на ~/.vim/ftplugin/javascript.vim.

Autocmd

autocmd - это самый простой способ установить что-то на основе языка:

autocmd Filetype <language> <setting>

Это происходит непосредственно в вашем vimrc и загружает настройки только для указанного типа файлов.

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

autocmd FileType markdown,tex,textile setlocal spell

Вы можете установить несколько настроек одновременно, разделив их на трубу, это быстро становится громоздким:

autocmd FileType php setlocal shiftwidth=4 tabstop=4|let php_sql_query=1

Источник AutoCMD +

В редких случаях у вас может быть достаточно настроек, чтобы гарантировать отдельный файл, но хотелось бы загрузить их для нескольких языков. Используя плагины filetype, вы получите дубликаты файлов или символические ссылки.

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

autocmd FileType markdown,tex,textile source ~/.vim/lang_settings/text.vim

Ответ 3

Вы можете попробовать плагин localvimrc. Он пытается загрузить .lvimrc в каталог проекта или каталоги выше. Вы можете разместить свои настройки там для каждого проекта.

Ответ 4

Другим решением является EditorConfig. Он устанавливает стили кодирования для разных проектов или типов файлов. Он работает с Vim, но он не является агностиком редактора, поэтому вы можете использовать файл .editorconfig с другими текстовыми редакторами (SublimeText2, Notepad ++, Vim, Emacs, Textmate, Gedit) или IDE (идеи на основе IDE, RubyMine, PHPStorm, Visual Номер-студио).

Ответ 5

Здесь другой вариант, аналогичный первому предложению @Ingo Karkat, за исключением того, что он позволяет вам иметь отдельные файлы vimrc для каждого рабочего каталога (что является более близким ответом на вопрос OP). Это немного хакерство, чем использование одного из доступных плагинов, но это предотвращает проблему безопасности плагина localvimrc и позволяет хранить все ваши варианты vimrc в вашем домашнем каталоге, а не разбросано по разным рабочим каталогам (хотя это будет работать просто а также если вы получили их в корне каждого из ваших соответствующих рабочих каталогов.

В .vimrc

if getcwd() =~ 'One Unique Target Directory'
  source ~/.one_unique_vimrc
elseif getcwd() =~ 'Another Unique Target Directory'
  source ~/.another_unique_vimrc
endif

Задача состоит в том, что вам нужно настроить таргетинг на один vimrc на уникальный путь - так что это не будет работать так хорошо со следующей структурой каталогов - если у вас есть один vimrc для Foo и один для Baz, непоследовательное поведение ( "Почему/Baz/Foo использует my/Foo vimrc?!" )

/Foo
/Foo/Bar
/Foo/Bar/Baz
/Baz
/Baz/Quux
/Baz/Foo

Но он может хорошо работать со структурой каталогов, подобной этой

/Projects/My Greatest App/
/Projects/My Greatest App/src
/Projects/My Greatest App/bin
/Projects/unique.net/
/Projects/unique.net/index.html
/Projects/unique.net/.htaccess

Если у вас есть один vimrc для вашего "My Greatest App", а другой для вашего уникального веб-сайта