tutorial c++ vim syntax-highlighting textmate vim-syntax-highlighting

c++ - tutorial - nombres de clase y función resaltados en Vim



vim c++ (10)

Curiosamente, los marcadores de sintaxis en VIM no admiten la aplicación de una sintaxis a identificadores o nombres de funciones, al menos no a los marcadores de sintaxis para C y C ++. Entonces, incluso si lo haces:

:hi Function guifg=red

o

:hi Identifier guifg=red

no les da un color Parece que no soy mucho más que palabras clave y constantes para estos idiomas.

Aquí, alguien ha comenzado a extender el archivo de sintaxis de cpp para admitir nombres de métodos. Es un comienzo, supongo. http://vim.wikia.com/wiki/Highlighting_of_method_names_in_the_definition

Recientemente configuré mi entorno Vim de Textmate, después de volverme adicto a su entrada modal.

Sin embargo, resaltar la sintaxis parece no ser tan hermoso en Vim. Codigo en C ++ y como la llamada de función y los nombres de clase no se pueden resaltar, el código es más difícil de leer. Jugué con el esquema de color por un tiempo, pero no pude encontrar ningún campo que correspondiera con "nombre de clase" o "nombre de función".

En la imagen a continuación, observe cómo DroughtLayer:: y *.size() no se resaltan a la derecha en MacVim.

Comparación de imágenes entre Textmate (izquierda) y Vim (derecha) http://ivzhao.com/temp/vimHL.png

¿Alguna idea de como resolver esto? Realmente me molesta, ya que soy un tipo sensible al tacto.


EDITAR: color_coded puede ser demasiado pesado para ti. prueba octol/vim-cpp-enhanced-highlight . Es compatible con C ++ 11/14 e integra lo que responde @Eduardo.

Iluminador basado en semántica :
Recomendaría jeaye/color_coded , un complemento vim para el resaltado basado en libclang
Lamento que soy nuevo en , lo que significa que no tengo la reputación suficiente para publicar imágenes. Ve a ver sus efectos si quieres darle una oportunidad. :)

Pros:

  • Fácil instalación
  • Resaltado semántico
  • Clighter mencionado como arriba, necesita vim compilado con python2.7 . Sin embargo, color_coded está escrito en C ++ y proporciona lua binding -> C ++.

Contras:

  • Se retrasa a menos que hagas algunos eventos vim para activarlo.
  • La personalización es un poco más difícil; necesita editar syntax / color_coded.vim usted mismo. Pero la personalización se ha colocado en su hoja de ruta.

Aunque todavía está en desarrollo, cada vez capta más atención.


La única solución es usar la base de datos de ctags incorporada. Entonces crea uno con la utilidad ctags . A continuación, establezca la variable ''etiquetas'' y coloque lo siguiente en

~/.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()

Debo advertirte que esto puede funcionar muy lento en la gran base de datos de ctags.

También hay una solución en vim.org pero no probé esta. Avíseme si funciona para usted.


Realmente te recomiendo el plugin taghighlight , taghighlight clic here para ver el sitio web.


Sergey, cambiando la primera línea de

syn match cCustomParen "(" contains=cParen,cCppParen

a

syn match cCustomParen "(" contains=cParen contains=cCppParen

parece arreglarlo para mí.


También se puede considerar el plugin Clighter , que es un

plugin for c-family semantic source code highlighting, based on Clang

Sin embargo, requiere versiones y software bastante recientes: vim 7.4.330 +python2 y libclang .



Tuve el mismo problema cuando comencé a usar vim. La solución es simple, solo tiene que editar el archivo de sintaxis c utilizado por vim, aquí le mostramos cómo hacerlo:

Cuando comienza a editar un archivo C o C ++, vim lee el archivo de sintaxis c predeterminado ubicado en

$VIMRUNTIME/syntax/c.vim

(Donde $ VIMRUNTIME es donde tiene vim instalado. Puede averiguar su valor predeterminado abriendo vim y usando el comando ": echo $ VIMRUNTIME").

Simplemente puede sobrescribir ese archivo, o puede crear su archivo de sintaxis C personalizado (que será cargado por vim en lugar del archivo predeterminado) en esta ubicación:

$HOME/.vim/syntax/c.vim (for UNIX) $HOME/vimfiles/syntax/c.vim (for PC or OS/2)

(Nunca he usado una Mac así que no sé cuál funcionará para usted. Puede encontrar más información en la ayuda de vim, ": help vimfiles")

Ahora la parte divertida. Copie el archivo predeterminado "$ VIMRUNTIME / syntax / c.vim" en su directorio vimfiles ("$ HOME / .vim / syntax / c.vim" para UNIX) y edítelo agregando estas líneas:

" 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

¡Eso es! Ahora las funciones y los nombres de las clases se resaltarán con el color definido en el resaltado "Función" (": función hi"). Si desea personalizar los colores, puede cambiar las últimas dos líneas anteriores a algo como esto:

hi def cCustomFunc gui=bold guifg=yellowgreen hi def cCustomClass gui=reverse guifg=#00FF00

o puede dejar el archivo de sintaxis C solo y definir los colores en su archivo vimrc (": help vimrc"):

hi cCustomFunc gui=bold guifg=yellowgreen hi cCustomClass gui=reverse guifg=#00FF00

(Tenga en cuenta la ausencia de la palabra clave "def", vaya a ": help highlight-default" para más detalles). Para conocer los parámetros disponibles para el comando ": hi" ver ": ayuda: resaltar".

Puede encontrar el archivo c.vim completo para Vim 7.2 en este enlace (Nota: solo use esto si tiene un Vim no modificado, versión 7.2):

http://pastebin.com/f33aeab77

Y la captura de pantalla obligatoria:

http://img16.imageshack.us/img16/2073/vimy.png (Lo siento por imageshack)


Use un complemento para vim como Taglist o configure ctags o integración de cscope con vim ( here''s un tutorial para vim / cscope).


esta es mi primera publicación aquí y no sabía cómo hacer una observación, la respuesta de Eduardo hace que "(" y "{" se vean sin corregir y la sintaxis de los errores foldind, lo cambié un poco para arreglar esto.

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