nomes de classe & função destacando no vim
-
09-09-2019 - |
Pergunta
Eu só recentemente configurar meu ambiente Vim de Textmate, depois de se tornar viciado em sua entrada modal.
No entanto, o destaque da sintaxe parece não ser tão bonito no vim. código que em C ++ e uma vez que a chamada de função e nomes de classe não pode ser destacado, o código é mais difícil de ler. Eu joguei com esquema de cores para um pouco, mas não conseguiu encontrar qualquer campo que correspondeu "nome da classe" ou "nome de função".
Na figura abaixo, observe como DroughtLayer::
e *.size()
não é realçado à direita na MacVim.
(fonte: ivzhao.com )
Alguma idéia de como resolver isso? Isso realmente me irrita como eu sou tanto um cara sensível ao visual.
Solução
Curiosamente, os marcadores de sintaxe em VIM não suportam a aplicação de uma sintaxe para identificadores ou nomes de função - pelo menos não os marcadores de sintaxe para C e C ++. Assim, mesmo se você fizer isso:
:hi Function guifg=red
ou
:hi Identifier guifg=red
não dar a estes uma cor. Eu só não parece ser muito mais do que palavras-chave e constantes para esses idiomas.
Aqui, alguém começou estender o arquivo de sintaxe CPP para suportar nomes de métodos. É um começo, eu acho. http://vim.wikia.com/wiki/Highlighting_of_method_names_in_the_definition
Outras dicas
Eu tive esse mesmo problema quando eu comecei a usar vim. A solução é simples, você só tem que editar o arquivo c sintaxe usado por vim, aqui está como fazê-lo:
Quando você começar a editar um arquivo C ou C ++, vim lê o arquivo padrão c sintaxe localizado no
$VIMRUNTIME/syntax/c.vim
(Onde $ VIMRUNTIME é onde você vim instalado Você pode descobrir que o valor padrão por vim abrir e usar o comando. ": Echo $ VIMRUNTIME").
Você pode simplesmente substituir esse arquivo, ou você pode criar o seu costume arquivo de sintaxe C (que será carregado pelo vim em vez do padrão) neste local:
$HOME/.vim/syntax/c.vim (for UNIX)
$HOME/vimfiles/syntax/c.vim (for PC or OS/2)
(Eu nunca usou um Mac então eu não sei qual deles irá funcionar para você Você pode saber mais na ajuda vim,. ": Vimfiles ajuda")
Agora, a parte divertida. Copie o padrão "$ VIMRUNTIME / sintaxe / c.vim" arquivo para seu diretório vimfiles ( "$ HOME / .vim / sintaxe / c.vim" para UNIX), e editá-lo adicionando estas linhas:
" Highlight Class and Function names syn match cCustomParen "(" contains=cParen,cCppParen syn match cCustomFunc "\w\+\s*(" contains=cCustomParen syn match cCustomScope "::" syn match cCustomClass "\w\+\s*::" contains=cCustomScope hi def link cCustomFunc Function hi def link cCustomClass Function
É isso aí! Agora funções e nomes de classe será destacado com a cor definida no destaque "Function" ( ": Função oi"). Se você quiser personalizar as cores, você pode alterar as duas últimas linhas acima para algo como isto:
hi def cCustomFunc gui=bold guifg=yellowgreen
hi def cCustomClass gui=reverse guifg=#00FF00
ou você pode deixar o arquivo de sintaxe C sozinho e definir cores em seu arquivo vimrc ( ": ajuda vimrc"):
hi cCustomFunc gui=bold guifg=yellowgreen
hi cCustomClass gui=reverse guifg=#00FF00
(Note a ausência do "def" palavra-chave, vá para ": ajudar a destacar-default" para mais detalhes). Para os parâmetros disponíveis para o comando: ver "oi" ": ajuda: destaque".
Você pode encontrar o arquivo c.vim completa para Vim 7.2 neste link (Nota: use somente este se você tem um Vim não modificado, versão 7.2):
E a imagem obrigatória:
este é meu primeiro post aqui e eu não sabia como fazer uma observação, a resposta de Eduardo faz "(" e "{" olhar unmached e os erros de sintaxe foldind, eu mudei um pouco para corrigir isso.
syn match cCustomParen "?=(" contains=cParen,cCppParen
syn match cCustomFunc "\w\+\s*(\@=" contains=cCustomParen
syn match cCustomScope "::"
syn match cCustomClass "\w\+\s*::" contains=cCustomScope
hi def cCustomFunc gui=bold guifg=yellowgreen
hi def link cCustomClass Function
A única solução é usar construído banco de dados ctags. Portanto, criar um com o href="http://ctags.sourceforge.net/" rel="noreferrer"> utilidade . Em seguida, defina a variável 'tags' e colocar o seguinte para o
~/.vim/after/syntax/c.vim
function! s:highlight()
let list = taglist('.*')
for item in list
let kind = item.kind
if kind == 'f' || kind == 'c'
let name = item.name
exec 'syntax keyword Identifier '.name
endif
endfor
endfunction
call s:highlight()
Eu devo avisá-lo que isso pode funcionar muito lento na grande base de dados ctags.
Também há um solução no vim.org mas eu não tente este. Deixe-me saber se ele funciona para você.
EDIT: color_coded pode ser demasiado pesado para você. tente octol / vim-CPP reforçada-destaque . Ele suporta C ++ 14/11 e integra Que respostas @Eduardo.
Semântica marcador com base:
Eu recomendaria jeaye / color_coded ,
A vim plugin para-baseada libclang destacando
Tão triste que eu sou novo para stackoverflow que significa que eu não tenho reputação suficiente para postar imagens. Vai ver seus efeitos, se você quiser dar-lhe um tiro. :)
Pros:
- Fácil instalação
- realce semântico
- Clighter mencionado acima, necessidade vim compilado com
python2.7
. No entanto, color_coded é escrito em C ++ e fornece ligação lua -> C ++.
Contras:
- Ele atrasa a menos que você faça alguns eventos vim para Acitve-lo.
- A personalização é pouco mais difícil; Você precisa editar sintaxe / color_coded.vim você mesmo. Mas personalização tem sido colocada em seu roteiro.
Embora ele ainda está em desenvolvimento, está ganhando cada vez mais atenção.
Sergey, mudando a primeira linha de
syn match cCustomParen "(" contains=cParen,cCppParen
para
syn match cCustomParen "(" contains=cParen contains=cCppParen
parece corrigi-lo para mim.
Tente usar este plugin http://www.vim.org/scripts /script.php?script_id=2646 Sua faz todas ctags destacando de forma muito eficiente para você
Eu realmente recomendo que você o plugin taghighlight
, clique aqui para ele do site.
O Clighter
plugin pode também ser considerado, que é um
plugin for c-family semantic source code highlighting, based on Clang
No entanto, requer versões bastante recentes e software:. vim 7.4.330 +python2
e libclang