Open gBopHuk opened 9 years ago
На самом деле тут
Эту фразу можно опустить - забыл что хотел написать =)
Скорее всего дело тут в сохранении и восстановлении сессии плагином vim_prj. Дело в том, что этот плагин сохраняет сессию "как есть", а все дополнительные функции, которые нужно вызвать для правильной работы плагина в сессию сохранены быть не могут. Возможно именно из за этого тема для airline не загружается.
Использовать Proj/.vimrc не получится здесь потому, что этот файл загружается и исполняется до загрузки сессии, которая затем может перекрывать некоторые его настройки.
Решить эту проблему можно используя события плагинов. Добавьте в конец вашего .vimrc следующую запись: silent! echo vim_lib#sys#Publisher# function! g:AirlineTheme(...) " {{{ AirlineTheme bubblegum endfunction " }}} call vim_lib#sys#Publisher#.new().listen('VimPrjLoadSession', function('g:AirlineTheme')) Эта команда вешает обработчик на событие VimPrjLoadSession, которое выбрасывается после загрузки сессии проекта. Обработчик задает тему для airline.
Решить эту проблему можно используя события плагинов. Добавьте в конец вашего .vimrc
Я правильно понимаю, что речь идёт про ~/.vimrc?
Разницы как таковой нет. И ~/.vimrc и Proj/.vimrc выполняются до событий плагинов, потому если в любом из них повесить обработчик на событие, то он сработает при возникновении события.
Разница тут только в том, что если вы добавите этот код в ~/.vimrc, то тема будет применяться при входе во все проекты, а если добавите в Proj/.vimrc, то только для этого проекта.
И по-идее тема из Proj/.vimrc должна переписать тему из ~/.vimrc ?
Тут логика сложнее. Если коротко, то да. Если не коротко, то это сработает вот так:
Тут важно помнить, что если вы поставите обработчик на событие в ~/.vimrc, а потом поставите обработчик на то же самое событие (с тем же именем) в Proj/.vimrc, то будут выполнены оба обработчика последовательно. То есть второй обработчик не заменяет собой первый, он просто добавляется в очередь, которая вызывается при появлении события.
Не помог хак с функцией в конце ~/.vimrc silent! echo vim_lib#sys#Publisher# function! g:AirlineTheme(...) " {{{ AirlineTheme bubblegum endfunction " }}} call vim_lib#sys#Publisher#.new().listen('VimPrjLoadSession', function('g:AirlineTheme'))
А покажите содержимое ~/.vimrc
"set exrc "set secure colorscheme bubblegum "docs helptags ~/.vim/doc helptags ~/.vim/bundle/vim_prj/doc helptags ~/.vim/bundle/vim_plugmanager/doc
"some settings
set fencs=utf-8,cp1251,koi8-r,cp866
set laststatus=2
set cursorline
set cursorcolumn
set noshowmode
"Airline settings let g:airline_powerline_fonts = 1 let g:airline#extensions#tabline#enabled = 1 let g:airline#enable#fugitive=1 let g:airline#enable#syntastic=1 let g:airline#enable#bufferline=1 let g:airline_theme='bubblegum'
"Nerdtree settings
nmap
let g:NERDTreeShowBookmarks = 1
"ReadOnly check
function CheckRo()
if &readonly
nmap
"** "Test vim_lib project "https://github.com/Bashka/vim_lib " filetype off set rtp=~/.vim/bundle/vim_lib call vim_lib#sys#Autoload#init('~/.vim', 'bundle') " Адрес до вашего ~/.vim/bundle
"Plugin 'vim_lib' "Plugin 'vim_plugmanager' "Plugin 'vim_prj' "Plugin 'vim_start' "Plugin 'vim_airline' so ~/.vim/plugins.vim
filetype indent plugin on
let vimprj#opt = {'author': '****', \ 'email': '_****', \ 'license': 'GNU GPL v3 (http://www.gnu.org/copyleft/gpl.html)'}
" Vim lib " **
silent! echo vim_lib#sys#Publisher# function! g:AirlineTheme(...) " {{{ AirlineTheme bubblegum endfunction " }}} call vim_lib#sys#Publisher#.new().listen('VimPrjLoadSession', function('g:AirlineTheme'))
Добавьте, пожалуйста, в тело функции g:AirlineTheme (не важно куда) команду echom 'Test' и откройте проект еще раз. После выполните команду :messages и скажите, есть ли там запись Test? Я хочу знать, вызывается ли у вас эта функции или нет.
Да, удачно.
function! g:AirlineTheme(...) " {{{ AirlineTheme bubblegum echom 'Test' endfunction " }}}
:messages
Перевод сообщений на русский язык: Василий РагозинTest Press ENTER or type command to continue
Ну если echom выполняется, можно сделать вывод, что AirlineTheme bubblegum тоже. Проверьте содержимое переменной g:airline_theme при открытии проекта с помощью команды: :echo g:airline_theme Какая тема там стоит?
:echo g:airline_theme bubblegum
Я проверил у себя локально, стиль меняется удачно. Команда AirlineTheme bubblegum у вас так же выполняется удачно. Почему не изменяется стиль сказать не могу.
Мда это странно, я проверяю ещё и в vbox, там конфиги вообще чистые. Оказывается можно исползовать команду :AirlineRefresh вместо длинной AirlineTheme bubblegum Но мне пока ни одна не помогает
Это странно, но если я добавлю в свой ~/.vimrc записи: let g:airline_powerline_fonts = 1 let g:airline#extensions#tabline#enabled = 1 let g:airline#enable#fugitive=1 let g:airline#enable#syntastic=1 let g:airline#enable#bufferline=1 let g:airline_theme='bubblegum' и уберу в нем: call vim_lib#sys#Publisher#.new().listen('VimPrjLoadSession', function('g:AirlineTheme')) то тема для airline так же подгружается нормально. Попробуйте удалить сохраненную сессию проекта. Для этого удалите файл Proj/.vim/session.vim. После откройте проект вновь.
Отлично! Всё работает! Спасибо Интерсно, что это было?
Я ещё вообще убрал функцию
function! g:AirlineTheme(...) " {{{ AirlineTheme bubblegum echom 'Test' endfunction " }}}
Хотя единственное что приходит в глову, так это то что проект создавался до установки airline( В обоих случаях : на vbox и на хост машине )
Рано я обрадовался. Хак сработал только один раз =(
Если закрыть vim и снова открыть , затем зайти в преокт - опять тёмный airline Если удалить session.vim , проблема исчезает до первого выхода из vim
Зайдите в проект и выполните команду :set sessionoptions? - что она вернет?
:set sessionoptions sessionoptions=blank,buffers,curdir,folds,help,options,tabpages,winsize
Можете мне дать содержимое вашего Proj/.vim/session.vim?
let SessionLoad = 1 if &cp | set nocp | endif let s:so_save = &so | let s:siso_save = &siso | set so=0 siso=0 let v:this_session=expand(":p") silent only cd /srv/akv/Projects/Tests/gethostname if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == '' let s:wipebuf = bufnr('%') endif set shortmess=aoO badd +1 .vim/session.vim silent! argdel * edit .vim/session.vim set splitbelow splitright set nosplitbelow set nosplitright wincmd t set winheight=1 winwidth=1 argglobal vnoremap [" :exe "normal! gv"|call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW") nnoremap [" :call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW") vnoremap [] m':exe "normal! gv"|call search('^\s*endf*\%[unction]\>', "bW") nnoremap [] m':call search('^\s*endf*\%[unction]\>', "bW") vnoremap [[ m':exe "normal! gv"|call search('^\s*fu\%[nction]\>', "bW") nnoremap [[ m':call search('^\s*fu\%[nction]\>', "bW") vnoremap ]" :exe "normal! gv"|call search('^\(\s*".*\n\)\@ ]" :call search('^\(\s*".*\n\)\@ ][ m':exe "normal! gv"|call search('^\s*endf*\%[unction]\>', "W") nnoremap ][ m':call search('^\s*endf*\%[unction]\>', "W") vnoremap ]] m':exe "normal! gv"|call search('^\s*fu\%[nction]\>', "W") nnoremap ]] m':call search('^\s*fu\%[nction]\>', "W") setlocal keymap= setlocal noarabic setlocal autoindent setlocal balloonexpr= setlocal nobinary setlocal bufhidden= setlocal buflisted setlocal buftype= setlocal nocindent setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e setlocal cinoptions= setlocal cinwords=if,else,while,do,for,switch setlocal colorcolumn= setlocal comments=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\" setlocal commentstring=\"%s setlocal complete=.,w,b,u,t,i setlocal concealcursor= setlocal conceallevel=0 setlocal completefunc= setlocal nocopyindent setlocal cryptmethod= setlocal nocursorbind setlocal cursorcolumn setlocal cursorline setlocal define= setlocal dictionary= setlocal nodiff setlocal equalprg= setlocal errorformat= setlocal noexpandtab if &filetype != 'vim' setlocal filetype=vim endif setlocal foldcolumn=0 setlocal foldenable setlocal foldexpr=0 setlocal foldignore=# setlocal foldlevel=0 setlocal foldmarker={{{,}}} setlocal foldmethod=manual setlocal foldminlines=1 setlocal foldnestmax=20 setlocal foldtext=foldtext() setlocal formatexpr= setlocal formatoptions=croql setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* setlocal grepprg= setlocal iminsert=2 setlocal imsearch=2 setlocal include= setlocal includeexpr= setlocal indentexpr=GetVimIndent() setlocal indentkeys=0{,0},:,0#,!^F,o,O,e,=end,=else,=cat,=fina,=END,0\\ setlocal noinfercase setlocal iskeyword=@,48-57,_,192-255,# setlocal keywordprg= setlocal nolinebreak setlocal nolisp setlocal nolist setlocal makeprg= setlocal matchpairs=(:),{:},[:] setlocal modeline setlocal modifiable setlocal nrformats=octal,hex setlocal nonumber setlocal numberwidth=4 setlocal omnifunc= setlocal path= setlocal nopreserveindent setlocal nopreviewwindow setlocal quoteescape=\\ setlocal noreadonly setlocal norelativenumber setlocal norightleft setlocal rightleftcmd=search setlocal noscrollbind setlocal shiftwidth=8 setlocal noshortname setlocal nosmartindent setlocal softtabstop=0 setlocal nospell setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ setlocal spellfile= setlocal spelllang=en setlocal statusline=%!airline#statusline(1) setlocal suffixesadd= setlocal swapfile setlocal synmaxcol=3000 if &syntax != 'vim' setlocal syntax=vim endif setlocal tabstop=8 setlocal tags= setlocal textwidth=78 setlocal thesaurus= setlocal noundofile setlocal nowinfixheight setlocal nowinfixwidth setlocal wrap setlocal wrapmargin=0 silent! normal! zE let s:l = 152 - ((58 * winheight(0) + 29) / 59) if s:l < 1 | let s:l = 1 | endif exe s:l normal! zt 152 normal! 0 tabnext 1 if exists('s:wipebuf') silent exe 'bwipe ' . s:wipebuf endif unlet! s:wipebuf set winheight=1 winwidth=20 shortmess=filnxtToO let s:sx = expand(" :p:r")."x.vim" if file_readable(s:sx) exe "source " . fnameescape(s:sx) endif let &so = s:so_save | let &siso = s:siso_save doautoall SessionLoadPost unlet SessionLoad " vim: set ft=vim :
В теме https://github.com/bling/vim-airline/issues/539 есть интересный момент https://github.com/bling/vim-airline/issues/539#issuecomment-70248803
А после повторного входа в проект (когда session.vim уже существует), что в переменной g:airline_theme?
:echo g:airline_theme bubblegum
Хмм... Тема устанавливается (как видно из переменной), почему она не отображается в редакторе, даже предположить не могу.
В продолжение темы https://github.com/Bashka/vim_plugmanager/issues/3
Имеем: Установленный в базовый каталог ~/.vim плагин airline
1) Запускаем vim
2) Открываем проект Airline тёмный и tabline сверху тоже
3) задём принудительно тему :AirlineTheme bubblegum Всё встаёт на свои места.
При отключенном плагине vim_start airline отрисовывается сразу как надо
Если плагин airline ставить непосредственно в .vim проекта, то поведение такое же - исправляется только после принудительной смены темы.
Попытался задать принудително тему в Proj/.vimrc командой let g:airline_theme='bubblegum' Не получилось - как была тёмной airline, так и осталась.
Может есть какая функция refresh или redraw, которую можно вызывать посел входа в проект? На самом деле тут