O esquema de cores Vim exibe cores erradas, corrige somente após .vimrc write

0

Eu configurei meu Vim para usar o esquema de cores Solarized, mas toda vez que eu abro o Vim, ele mostra as cores erradas. Além disso, tenho uma linha no meu arquivo .vimrc que informa ao VIM para recarregar .vimrc toda vez que é salvo. Quando eu abro .vimrc e só digito um único :w , a cor é automaticamente corrigida.

Esta é a linha em .vimrc que ativa o autoreload:

au BufWritePost .vimrc so ~/.vimrc  

Meu Vim é a versão 7.4, compilada por mim, rodando no Ubuntu 14.04, dentro de um console que foi alterado para o Solarized também.

Para referência, este é o meu arquivo vimrc completo:

set nocompatible              " be iMproved, required
filetype off                  " required

set shell=/bin/bash

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
" alternatively, pass a path where Vundle should install bundles
"let path = '~/some/path/here'
"call vundle#rc(path)

" let Vundle manage Vundle, required
Bundle 'gmarik/vundle'

" The following are examples of different formats supported.
" Keep bundle commands between here and filetype plugin indent on.
" scripts on GitHub repos
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
"Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
" scripts from http://vim-scripts.org/vim/scripts.html
"Bundle 'FuzzyFinder'
" scripts not on GitHub
"Bundle 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
"Bundle 'file:///home/gmarik/path/to/plugin'
" ...
"
Bundle 'L9'

Bundle 'scrooloose/nerdcommenter'
Bundle 'scrooloose/nerdtree'
"Bundle 'vim-scripts/Conque-Shell'
Bundle 'bling/vim-airline'

Bundle 'tpope/vim-fugitive'

Bundle 'Lokaltog/vim-easymotion'
Bundle 'tpope/vim-surround'
Bundle 'ervandew/supertab'
Bundle 'kien/ctrlp.vim'
Bundle 'Raimondi/delimitMate'

"Bundle 'lepture/vim-css'
"Bundle 'groenewege/vim-less'
Bundle 'hail2u/vim-css3-syntax'
Bundle 'groenewege/vim-less'

Bundle 'Valloric/YouCompleteMe'
Bundle 'scrooloose/syntastic'

Bundle 'xolox/vim-session'
Bundle 'xolox/vim-misc'

Bundle 'altercation/vim-colors-solarized'

Bundle 'jelera/vim-javascript-syntax'
"Bundle 'pangloss/vim-javascript'
Bundle 'nathanaelkane/vim-indent-guides'
Bundle 'marijnh/tern_for_vim'
Bundle 'vim-scripts/JavaScript-Indent'
Bundle 'othree/javascript-libraries-syntax.vim'


filetype plugin indent on     " required


" ycm
let g:ycm_autoclose_preview_window_after_completion=1
let g:ycm_confirm_extra_conf = 0

" solarized theme
syntax enable
set background=dark
let g:solarized_termcolors=16
color solarized

" session manager
:let g:session_autosave = 'no'

" fix end & home buttons
set term=xterm-256color

" airline
set laststatus=2
let g:airline_powerline_fonts = 1

" list files for open
set wildmenu

" reselect visual block after indent
vnoremap < <gv
vnoremap > >gv

" easy split nav
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

" Y behav
map Y y$

"move on wrapeed lines
nnoremap j gj
nnoremap k gk

" clear search highlights
"noremap <silent><Leader>/ :nohls<CR>

" automatically reload vimrc when it's saved
au BufWritePost .vimrc so ~/.vimrc

" leader remap
let mapleader = ","

" jk as esc
inoremap jk <Esc>
inoremap kj <Esc>



" absolute line numbers in insert mode, relative otherwise for easy
" movement
"au InsertEnter * :set nu
"au InsertLeave * :set rnu

" show current file in nerd tree
map <silent> <C-s> :NERDTree<CR><C-w>p:NERDTreeFind<CR>

" show line numbers
set number

" search case insensitive
set ignorecase
set smartcase

" searhc incremental
set incsearch

" ctrl-p
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlPMRUFiles' " by default ctrlp opens in mru + files mode
set wildignore+=*/tmp/*,*.so,*.swp,*.zip     " ignore shitty files

" ctrlp on enter, open in a tab. on c-e, open in current.
let g:ctrlp_prompt_mappings = {
\ 'AcceptSelection("e")': ['<c-e>', '<2-LeftMouse>'],
\ 'AcceptSelection("t")': ['<cr>'],
\ 'PrtCurEnd()':          ['<c-q>'],
\ }

let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'
"let g:ctrlp_custom_ignore = {
  "\ 'dir':  '\v[\/]\.(git|hg|svn)$',
  "\ 'file': '\v\.(exe|so|dll)$',
  "\ 'link': 'some_bad_symbolic_links',
  "\ }

" nerd tree auto open on start
autocmd vimenter * if !argc() | NERDTree | endif

" nerd tree toggle with c-n
map <C-n> :NERDTreeToggle<CR>

" nerd tree auto close when opening a file
let NERDTreeQuitOnOpen = 1

" map Q to repeat last macro
nnoremap Q @@

" fold on syntax
set foldmethod=indent
set foldcolumn=0
set foldlevel=1

" set mouse
set mouse=a
" tab = 4 spaces
set tabstop=4
set expandtab
set shiftwidth=4

" css complete fix
"fu! InsertTabWrapper(direction)
  "let char_before = col('.') - 1
  "if !char_before || getline('.')[char_before - 1] !~ '\k'
"return "\<tab>"
  "elseif "backward" == a:direction
"return "\<c-p>"
  "else
"return "\<c-n>"
  "endif
"endfu

"inoremap <tab> <c-r>=InsertTabWrapper("forward")<cr>
"inoremap <s-tab> <c-r>=InsertTabWrapper("backward")<cr>

" javascript fold
au FileType javascript call JavaScriptFold()

" javascript libs
let g:used_javascript_libs = 'jquery,angularjs,angulaui'

" less compilation
nnoremap <Leader>m :w <BAR> !lessc % > %:t:r.css<CR><space>

" jump to last tab by leader tl
let g:lasttab = 1
nmap <leader>l :exe "tabn ".g:lasttab<CR>
au TabLeave * let g:lasttab = tabpagenr()

" map common typos
cabbrev W w
cabbrev Q q
cabbrev E e

" easier session
cabbrev S SaveSession
cabbrev O OpenSession

" nerd tree change current dir
let g:NERDTreeChDirMode = 2

" auto save the session on quit
let g:session_autosave = 'yes'

" auto save the session periodically
let g:session_autosave_periodic = 5


" fix backspace
set backspace=indent,eol,start  

Como uma reflexão tardia, acho que o histórico de textos na primeira imagem está correto, mas o plano de fundo da tela inteira está errado. Eu ainda estou me perguntando por quê.

    
por sazary 30.04.2014 / 19:24

1 resposta

3

Se as cores estiverem corretas depois de executar color solarized pela segunda vez, provavelmente é por causa de alguma configuração diferente na segunda vez em que o comando foi executado, isto é, alguma configuração feita após o comando color solarized em seu vimrc. Aquele que se destaca para mim é set term=xterm-256color . Tente colocar isso antes do bloco que começa com syntax enable e veja se isso ajuda.

Meu palpite é que o arquivo solarized.vim colorscheme faz algumas configurações que dependem do número de cores disponíveis no terminal. Se $ TERM for "xterm" quando você iniciar o vim, então o número de cores que o vim acha que estão disponíveis será 8. Você pode verificar isso iniciando o vim como

vim -N -u NONE

(para que o seu vimrc não seja originado) e executando

:set t_Co?

Este é o número de cores que o comando color solarized achará disponível na primeira vez em que for executado. Depois que o comando for executado, seu vimrc executará set term-xterm-256color , que definirá o número de cores disponíveis para 256. A execução desse comando não terá nenhum efeito no seu esquema de cores.

Quando você executa :w , seu vimrc é originado novamente e desta vez quando o comando color solarized é executado, ele verá o número de cores como 256 e poderá alterar sua paleta de acordo.

Além disso, não é uma boa ideia continuar a fornecer seu vimrc, porque você vai acabar com várias instâncias de seus autocommands. Como exemplo, execute :w algumas vezes e, em seguida, execute :au TabLeave . Você verá uma lista de instâncias de let g:lasttab = tabpagenr() , uma para cada vez que seu vimrc foi originado. Todos esses comandos serão executados sempre que o evento TabLeave ocorrer.

Eu não sei por que você iria querer criar seu arquivo vimrc toda vez que você escrevesse um buffer, mas eu deixaria isso para você. Uma maneira de contornar o problema de acumular autocommands seria colocá-los todos em um grupo em seu vimrc e excluir quaisquer membros desse grupo antes de definir qualquer um. Vamos tomar apenas dois dos seus comandos automáticos como um exemplo.

augroup Vimrc
au! "Removes all autocommands in the Vimrc group.
au FileType javascript call JavaScriptFold() 
au TabLeave * let g:lasttab = tabpagenr()
augroup END
    
por 01.05.2014 / 00:27