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
.
Trate de usar este complemento http://www.vim.org/scripts/script.php?script_id=2646 hace de manera muy eficiente.
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):
Y la captura de pantalla obligatoria:
http://img16.imageshack.us/img16/2073/vimy.png (Lo siento por imageshack)
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