Destacar endif no vim

1

Estou criando um esquema de cores para o vim e desejo fornecer as cores if e endif distintas.

Eu segui o tutorial sobre vimcasts e tenha o seguinte arquivo

"set 256 colors for gnome-terminal
if $COLORTERM == 'gnome-terminal'
    set t_Co=256
endif
set background=dark
highlight clear
if exists("syntax_on")
    syntax reset
endif
let g:colors_name = "my_color_scheme"

highlight guibg=#110117 ctermbg=233
highlight vimcommand guifg=#6792db ctermfg=68 guibg=NONE
highlight link number vimstring
highlight vimnotfunc guifg=#e6b13e ctermfg=179 guibg=NONE

As últimas linhas alteram a cor de if , mas não de endif .

Eu usei o snippet para encontrar o nome da sintaxe

" Show syntax highlighting groups for word under cursor
nmap <C-S-P> :call <SID>SynStack()<CR>
function! <SID>SynStack()
  if !exists("*synstack")
     return
  endif
  echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc 

Mostra ['vimIsCommand', 'vimCommand'] . Definir uma cor fg para qualquer um deles não parece alterar o realce.

Como posso encontrar o nome do grupo certo?

    
por Held 16.05.2014 / 00:42

1 resposta

0

Primeiro, um esquema de cores apenas fornece um mapeamento de grupos de realce (principalmente genéricos) para determinadas cores e atributos de texto. Um script de sintaxe fornece regras de análise para identificar elementos de sintaxe. Esses grupos de sintaxe (por exemplo, vimCommand ) são vinculados aos grupos genéricos de destaque (como Statement ).

Embora um esquema de cores personalizado possa realmente fornecer uma cor especial para, digamos, vimCommand , isso é incomum. Você pode fazer isso em seu próprio esquema de cores, mas também pode executar a substituição :hi link ... no seu ~/.vimrc .

Em qualquer caso, você só pode atribuir cores distintas a grupos de sintaxe separados .

O plug-in SyntaxAttr.vim - Mostrar atributos de destaque da sintaxe de caractere sob cursor é semelhante a o trecho na sua pergunta. Com ele e observando a definição de sintaxe em $VIMRUNTIME/syntax/vim.vim , vejo que if pertence ao grupo vimNotFunc (junto com elseif , return e while ), enquanto endif é juntos com todos os comandos do Vimscript em vimCommand . Assim, qualquer alteração de cor também afetaria muitos outros comandos, o que pode não ser o que você deseja.

Para corrigir isso, você precisaria ajustar as próprias regras de sintaxe, definindo a substituição de comandos :syntax e colocando-as em ~/.vim/after/syntax/vim.vim . Isso é possível, mas tedioso (especialmente considerando que você pode querer ter o mesmo para outros idiomas também). Eu prefiro reconsiderar se você não mora com os agrupamentos predefinidos.

    
por 16.05.2014 / 20:12