Questão Destaque endif no vim


Estou criando um esquema de cores para o vim e quero dar o ife endif cores 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 mudam a cor do if mas não de endif.

Eu usei o trecho 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 

Isto 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?


1


origem




Respostas:


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

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

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

o SyntaxAttr.vim - Mostrar os atributos de destaque da sintaxe do caractere sob o cursor O plugin é semelhante ao snippet da sua pergunta. Com isso, e olhando para a definição de sintaxe em $VIMRUNTIME/syntax/vim.vim, Eu vejo isso if pertence aos vimNotFunc grupo (juntamente com elseif, returne while), enquanto que endif é colocado em conjunto com todos os comandos 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 regras de sintaxe, definindo a substituição :syntax comandos e colocá-los 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 vive com os agrupamentos predefinidos.


0