Только начинаю осваивать Vim и захотелось мне настроить его таким образом, чтоб при запуске из конкретной директории (например директории проекта) он восстанавливал все ранее открытые файлы для этой самой директории.
Для этого в _vimrc прописал следующее
function! SessionDir()
if has('win32')
let sessiondir = $VIM . '/vimfiles/sessions/'.
\substitute(fnamemodify(".",":pwd"), ':', '', '')
else
let sessiondir = $HOME . '/.vim/sessions/'.
\substitute(fnamemodify(".",":pwd"), '^'.$HOME, '~', '')
endif
return sessiondir
endfunctio
function! SaveSession()
let sessiondir = SessionDir()
" Create session directory if it doesn't exist
if !isdirectory(sessiondir)
call mkdir(sessiondir, 'p', 0700)
endif
execute "mksession! " . sessiondir . "/session.vim"
endfunction
function! RestoreSession()
let sessiondir = SessionDir()
if argc() == 0 && filereadable(sessiondir . "/session.vim")
execute "source " . sessiondir . "/session.vim"
endif
endfunction
autocmd VimLeave * call SaveSession()
autocmd VimEnter * call RestoreSession()
Сессии вроде сохраняются и восстанавливаются как надо, но вот при восстановлении сессии слетает подсветка синтаксиса для всех уже открытых файлов. И :set filetype? возвращает пустую строку.
До этого просто сохранял текущую сессию, без привязки к директории запуска Vim. Код в _vimrc был таким
autocmd VimLeave * execute "mksession! " . $VIM . "/vimfiles/session.vim"
autocmd VimEnter * nested if argc() == 0 && filereadable($VIM . "/vimfiles/session.vim") |
\ execute "source " . $VIM . "/vimfiles/session.vim"
И проблем никаких небыло.
Session options выславлены в
set ssop = blank, curdir, buffers, tabpages, unix, slash, winpos, winsize, resize
Опции, необходимые для подсветки синтаксиса, включены
filetype on
filetype plugin on
filetype indent on
syntax on
Заранее прошу прощения за столь нубский код и вопрос.