2011-01-28 13 views
7

Ruby:¿La omni-realización de VIM es realmente tan limitada? ¿O me estoy perdiendo algo?

file = File.new("some.txt", "r") 
lines = file.readlines 

pruebas Omni-finalización

file.readl 
    --------- 
    readline  <- PASSED 
    readlines 
    --------- 

"hola".capital 
    --------- 
    capitalize <- PASSED 
    capitalize! 
    --------- 

lines. 
       <-- FAILED (no suggestions) 

lines[0].capital 
       <-- FAILED (no suggestions) 

Probé Python así, y funcionó de manera similar. Entonces, parece que omni-complete no se puede usar para el desarrollo real, ya que falla en casos bastante simples.

¿Me falta algo? Puede ser que el intellisense se pueda mejorar de alguna forma para Ruby/Python?

+0

Todo depende de ese script de omni completado que no es necesariamente parte de la configuración de vim. Si uno fuera al extremo, el guión omni completo * podría * manejar cualquier situación maneja Intellisense. – progo

Respuesta

10

El problema es que Vim no sabe si line es una Cadena, una Matriz o alguna otra Clase. No hay un profundo análisis sintáctico en Vim. Vim no tiene idea del alcance, si se ha definido una variable o método, etc.

Solo está sugiriendo palabras similares. Entonces sí, Vim es más limitado que un IDE en este aspecto. Este es también el motivo por el que Eclipse puede sugerir errores a medida que los escribe, y Vim no puede.

Vim es mucho más básico: en cierto modo, todo es texto, y no necesariamente visto como "código".

Tienes razón, esta es una de las limitaciones de Vim.

Existen algunos complementos para evitar estas limitaciones (omnicpp está usando ctags para determinar el alcance de algunos métodos) pero a menudo se desarrollan por idioma y no hay una solución mágica.

+0

+1 - Buena respuesta. También agregaría que el problema se complica cuando se trabaja con lenguajes dinámicos donde las vinculaciones de los objetos no se conocen hasta el tiempo de ejecución. Incluso los IDE tienen que trabajar un poco de magia para ser útiles en estos casos. –

+3

Sabes, AFAIK cada script de omni completado es de alguna manera específico del lenguaje: no hay un conjunto predeterminado. Solo son scripts, de terceros, como cualquier otro complemento. La secuencia de comandos también podría determinar los ámbitos y tipos, así como los IDE lo hacen. – progo

+0

@progo: tienes razón. Mi comentario intentaba poner a Vim en perspectiva frente a un IDE específico para Langage para Java, C# ... Vim es una herramienta general y en realidad no puede competir contra una herramienta específica en algunos casos. –

Cuestiones relacionadas