Вы можете запускать автокоманды отдельно для каждого каталога, так что вы можете настроить все что угодно автоматически без горячих клавиш.Вот что я придумал:
" set up global defaults, these are mine
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smarttab
set expandtab
set autoindent
set smartindent
" override tab settings on a per-directory basis
function! SetStandardTabs()
set noexpandtab
set tabstop=8
set softtabstop=4
endfunction
augroup PerDirectoryTabs
autocmd!
autocmd BufRead,BufEnter,BufNewFile /path/to/csharp/files/* call SetStandardTabs()
augroup END
Это конфигурирует vim для автоматического определения, когда вы находитесь в поддереве / path / to / csharp / files, и устанавливает локальные переменные буфера так, как вы хотите,Поместите его в свой .vimrc, и все готово.
Edit Вот код, который нужно вставить в ваш .vimrc, который ищет в дереве ближайший "локальный" .vimrc иИсточники (нагрузки) это.Используйте с осторожностью!Не устанавливайте глобальные переменные и не делайте что-нибудь «интересное», у вас будет трудно диагностировать поведение.Я не исчерпывающе проверил это.Это может съесть ваших детей.Вы были предупреждены!
" per-subtree .vimrc
function! FindAndSourceLocalVimrc()
if exists('g:inFindLocalVimrc')
return
endif
let g:inFindLocalVimrc=1
let v = findfile('.vimrc', '.;')
if exists('v')
let v = fnamemodify(v, ':p')
if v != $MYVIMRC
exe "source " . v
endif
endif
unlet g:inFindLocalVimrc
endfunction
call FindAndSourceLocalVimrc()
Я уверен, что через 10 лет я найду уже существующий встроенный способ сделать это в одну строку.