Pregunta

He omnicpcomplete funcionando bien, excepto de vez en cuando, no completará algunos de los métodos/miembros de variables. Finalmente me molesté lo suficiente como para profundizar por qué y creo que la razón es que OmnicpComplete admite la sintaxis "foo const & foo" en los argumentos de funciones.

Por ejemplo, si tengo una función definida como:

int foo( Bar const & b ){
}

No podré obtener información de finalización cuando luego escriba "b". Sin embargo, si cambio la firma a:

int foo( const Bar & b ){
}

Podré obtener información de finalización cuando escriba "b". Parece estar solo en listas de argumentos de funciones porque intenté simplemente definir una variable dentro de la función con la firma "Bar Const & Bref" y pude obtener información de finalización para Bref.

Me sorprendería si esta es una limitación real de OmnicpComplete; ¿Alguien tiene alguna idea sobre si esto es o no un error y/o si hay una solución para ello? Cambiar el estilo de codificación no parece una solución razonable.

¿Fue útil?

Solución

Parece una limitación en OmnicpComplete, pero detuve el Vim Debugger y lo encontré.

Abra Autoload/Omni/CPP/Utils.vim, vaya a la línea 518, debería verse así:

  for token in tokens
        if state==0
            if token.value=='>'
                let parenGroup = token.group
                let state=1
            elseif token.kind == 'cppWord'
                let szResult = token.value.szResult
                let state=2
            elseif index(['*', '&'], token.value)<0 "This is line 518
                break
            endif

Y cambie esa línea a:

 elseif token.value != 'const' && index(['*', '&'], token.value)<0

O, aquí están los comandos VIM para hacerlo =):

/index(\['\*', '&'],<CR>itoken.value != 'const' &&<ESC>:w

Intentaré enviar esto al mantenedor de Omnicpcomplete, pero es un poco hackish, no sé si entrará. Podría haber podido verificar si token.kind == 'cppkeyword', pero pensé que erraría del lado de cambiar lo menos.

Otros consejos

Habiendo experimentado problemas con omnicpcomplete, busqué una alternativa y encontré CLANG COMPLETO que utiliza la salida de metadatos de Clang (que está destinado a tales fines). Trabajo extremadamente bien y proporcioné sus compilaciones de código, lo entenderá todo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top