Как заставить Vim автоматически загружать конфигурацию .vimrc из текущего каталога?

Как заставить Vim автоматически загружать конфигурацию .vimrc из текущего каталога?

У меня есть несколько проектов, которым нужны разные команды для запуска, сборки и тестирования, поэтому я поместил в каждый из каталогов проекта файл .vimrc, который определяет сопоставления с некоторыми кнопками F. В файлах справки vim говорится:

'exrc' 'ex' логическое значение (по умолчанию выключено)
                        Глобальный
                        {нет в Vi}
        Позволяет читать .vimrc, .exrc и .gvimrc в текущем
        каталог.

Итак, у меня эта опция включена, но когда я :cdзахожу в каталог, файл .vimrc не загружается. Если я пишу, :so .\.vimrcто он загружается нормально. Почему он не загружается автоматически?


Я использую gVim 7.3 x64 для Windows.

решение1

Если задано «exrc», в текущем каталоге выполняется поиск файла с именем _vimrc, .vimrcили_exrc при запуске. Это не делается каждый раз, когда вы :cdпереходите в новый каталог. Смотрите

:help .vimrc

решение2

По моему мнению, это лучший вариант:

if getcwd() =~ '^\(/my/safe/dir1/\|/my/safe/dir2/\)'
  set secure exrc
endif

Источник:http://vim.wikia.com/wiki/Open_vimrc_file но фиксированный синтаксис

решение3

В vim версии 8.1^ есть событие autocmd с именемDirChangedкоторые вы можете использовать для оценки вашего проекта .vimrc. Вот более подробная информация о том, когда это событие срабатывает:

DirChanged = Working directory has changed in response to the |:cd| or |:lcd| commands.

Рабочий пример

Я не эксперт в vim-script, но я создал следующую функцию, которая загружает .vimrcфайл моего проекта, как только я cdпопадаю в папку проекта. Вставьте эту функцию в ваш основной ~/.vimrcфайл.

if !exists("*LoadProjectVimrc")
  function! LoadProjectVimrc()
    let vimrcFile = findfile(".vimrc", ".;")

    if !empty(vimrcFile)
      execute ":so" l:vimrcFile
      echom l:vimrcFile
    endif

  endfunction
endif
autocmd DirChanged * :call LoadProjectVimrc()

решение4

Для справки: в итоге я создал ярлык для каждого из своих проектов и загрузил конфигурационный файл конкретного проекта как файл сеанса с помощью -S session.vim.

Связанный контент