У меня есть несколько проектов, которым нужны разные команды для запуска, сборки и тестирования, поэтому я поместил в каждый из каталогов проекта файл .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
.