Bashka / vim_start

2 stars 1 forks source link

Тёмный AirLine при включенном плагине vim_start #4

Open gBopHuk opened 9 years ago

gBopHuk commented 9 years ago

В продолжение темы https://github.com/Bashka/vim_plugmanager/issues/3

Имеем: Установленный в базовый каталог ~/.vim плагин airline

1) Запускаем vim vimstart-start-window

2) Открываем проект vimstart-openedproj Airline тёмный и tabline сверху тоже

3) задём принудительно тему :AirlineTheme bubblegum vimstart-airlinetheme Всё встаёт на свои места.

При отключенном плагине vim_start airline отрисовывается сразу как надо without-vimstart

Если плагин airline ставить непосредственно в .vim проекта, то поведение такое же - исправляется только после принудительной смены темы.

Попытался задать принудително тему в Proj/.vimrc командой let g:airline_theme='bubblegum' Не получилось - как была тёмной airline, так и осталась.

Может есть какая функция refresh или redraw, которую можно вызывать посел входа в проект? На самом деле тут

gBopHuk commented 9 years ago

На самом деле тут

Эту фразу можно опустить - забыл что хотел написать =)

Bashka commented 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.

gBopHuk commented 9 years ago

Решить эту проблему можно используя события плагинов. Добавьте в конец вашего .vimrc

Я правильно понимаю, что речь идёт про ~/.vimrc?

Bashka commented 9 years ago

Разницы как таковой нет. И ~/.vimrc и Proj/.vimrc выполняются до событий плагинов, потому если в любом из них повесить обработчик на событие, то он сработает при возникновении события.

Разница тут только в том, что если вы добавите этот код в ~/.vimrc, то тема будет применяться при входе во все проекты, а если добавите в Proj/.vimrc, то только для этого проекта.

gBopHuk commented 9 years ago

И по-идее тема из Proj/.vimrc должна переписать тему из ~/.vimrc ?

Bashka commented 9 years ago

Тут логика сложнее. Если коротко, то да. Если не коротко, то это сработает вот так:

  1. Появится событие VimPrjLoadSession
  2. Сначала выполнится тот обработчик, что ставился в ~/.vimrc, потому что этот файл вызывается раньше. Он установит тему
  3. Потом выполнится обработчик, который ставился в Proj/.vimrc, он перепишет тему

Тут важно помнить, что если вы поставите обработчик на событие в ~/.vimrc, а потом поставите обработчик на то же самое событие (с тем же именем) в Proj/.vimrc, то будут выполнены оба обработчика последовательно. То есть второй обработчик не заменяет собой первый, он просто добавляется в очередь, которая вызывается при появлении события.

gBopHuk commented 9 years ago

Не помог хак с функцией в конце ~/.vimrc silent! echo vim_lib#sys#Publisher# function! g:AirlineTheme(...) " {{{ AirlineTheme bubblegum endfunction " }}} call vim_lib#sys#Publisher#.new().listen('VimPrjLoadSession', function('g:AirlineTheme'))

Bashka commented 9 years ago

А покажите содержимое ~/.vimrc

gBopHuk commented 9 years ago

$ cat .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 :NERDTreeToggle let g:NERDTreeChDirMode = 2
let g:NERDTreeShowBookmarks = 1

"ReadOnly check function CheckRo() if &readonly nmap :q endif endfunction au BufReadPost * call CheckRo() "if has('gui_running') " set guifont=Liberation\ Mono\ for\ Powerline\ 10 " set visualbell t_vb= "endif "

"** "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'))

Bashka commented 9 years ago

Добавьте, пожалуйста, в тело функции g:AirlineTheme (не важно куда) команду echom 'Test' и откройте проект еще раз. После выполните команду :messages и скажите, есть ли там запись Test? Я хочу знать, вызывается ли у вас эта функции или нет.

gBopHuk commented 9 years ago

Да, удачно.

function! g:AirlineTheme(...) " {{{
        AirlineTheme bubblegum
        echom 'Test'
endfunction " }}}

:messages

Перевод сообщений на русский язык: Василий Рагозин 
Test
Press ENTER or type command to continue
Bashka commented 9 years ago

Ну если echom выполняется, можно сделать вывод, что AirlineTheme bubblegum тоже. Проверьте содержимое переменной g:airline_theme при открытии проекта с помощью команды: :echo g:airline_theme Какая тема там стоит?

gBopHuk commented 9 years ago

:echo g:airline_theme bubblegum

Bashka commented 9 years ago

Я проверил у себя локально, стиль меняется удачно. Команда AirlineTheme bubblegum у вас так же выполняется удачно. Почему не изменяется стиль сказать не могу.

gBopHuk commented 9 years ago

Мда это странно, я проверяю ещё и в vbox, там конфиги вообще чистые. Оказывается можно исползовать команду :AirlineRefresh вместо длинной AirlineTheme bubblegum Но мне пока ни одна не помогает

Bashka commented 9 years ago

Это странно, но если я добавлю в свой ~/.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. После откройте проект вновь.

gBopHuk commented 9 years ago

Отлично! Всё работает! Спасибо Интерсно, что это было?

Я ещё вообще убрал функцию

function! g:AirlineTheme(...) " {{{
        AirlineTheme bubblegum
        echom 'Test'
endfunction " }}}

Хотя единственное что приходит в глову, так это то что проект создавался до установки airline( В обоих случаях : на vbox и на хост машине )

gBopHuk commented 9 years ago

Рано я обрадовался. Хак сработал только один раз =(

gBopHuk commented 9 years ago

Если закрыть vim и снова открыть , затем зайти в преокт - опять тёмный airline Если удалить session.vim , проблема исчезает до первого выхода из vim

Bashka commented 9 years ago

Зайдите в проект и выполните команду :set sessionoptions? - что она вернет?

gBopHuk commented 9 years ago

:set sessionoptions sessionoptions=blank,buffers,curdir,folds,help,options,tabpages,winsize

Bashka commented 9 years ago

Можете мне дать содержимое вашего Proj/.vim/session.vim?

gBopHuk commented 9 years ago

$ cat Projects/Tests/gethostname/.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 :
gBopHuk commented 9 years ago

В теме https://github.com/bling/vim-airline/issues/539 есть интересный момент https://github.com/bling/vim-airline/issues/539#issuecomment-70248803

Bashka commented 9 years ago

А после повторного входа в проект (когда session.vim уже существует), что в переменной g:airline_theme?

gBopHuk commented 9 years ago

:echo g:airline_theme bubblegum

Bashka commented 9 years ago

Хмм... Тема устанавливается (как видно из переменной), почему она не отображается в редакторе, даже предположить не могу.