indent python vim autocomplete omnicomplete

indent - La Omnicompletion de Vim con Python simplemente no funciona



vim python syntax (9)

¿Has intentado usar <C_x><C-]> ?

He buscado alrededor de una hora, tanto en Stack Overflow como en otros lugares. ¡Ay! Por favor ayuda. La omnicompleción de Vim simplemente no funciona .

  1. Tengo Vim 7.2 compilado con soporte de Python.

  2. filetype plugin on .vimrc está en mi .vimrc .

  3. Cuando un archivo .py está abierto :echo &omnifunc imprime pythoncomplete#Complete .

  4. Estoy trabajando con un proyecto grande y tengo un archivo de tags generado con tags exhuberant-ctags . Está en el camino de los ctags de Vim. Puedo probarlo escribiendo ^] en un símbolo y luego me llevan a la definición de símbolos.

  5. Actualización 1: Todo el código de mi proyecto está en la ruta de Python-in-Vim. Puedo :python import myproject éxito.

Ahora, en cualquier lugar que pruebo Cx Co , todo lo que obtengo es:

-- Omni completion (^O^N^P) Pattern not found

¿Qué estoy haciendo mal?

Actualización 2: cuando escribo Cx Co Cn a nivel de módulo, Vim muestra una ventana emergente de finalización con algunas constantes a nivel de módulo de otros módulos en mi proyecto. Pero solo son constantes (símbolos mayúsculas) y la finalización aún no funciona en ningún otro lado.

Actualización 3: He encontrado que Cx Co en la parte superior del archivo comienza algún tipo de omnicompleción y finalización para pprint. abre el menú y referencia rápida de todo en el módulo pprint . Sin embargo, ninguna de las importaciones de mi propio módulo se está completando.

Actualización 4, un año después: me rendí y aprendí Emacs. He estado en el lado oscuro, la tierra mística de la intriga y la especia, y te digo que he encontrado el Camino.

Actualización 5, dos años después: volví a Vim. Emacs es hermoso, pero incluso después de 1,5 años de Emacs, soy aún más rápido para terminar el trabajo en Vim. Sin embargo, he dejado de escribir Python por el momento y no puedo probar qué tan bien funcionan estas sugerencias.


¿Qué módulo contiene el símbolo que intentas completar? ¿Está en el python stdlib? ¿O es un módulo de terceros?

Asegúrese de que el módulo / paquete esté en PYTHONPATH.

En Vim, haz:

:python import sys :python print sys.path

Para agregar el directorio del módulo:

:python sys.path.append("/path/to/directory/")


Como usted fue prudente y se aseguró de que su código sea accesible por PYTHONPATH, por sugerencia del codeape, ¿existe la posibilidad de que se encuentre con el error de import de Vim Python omni-complete ? Este error todavía existe a partir de Vim 7.2.245.

Básicamente, si falla cualquier declaración de importación en el archivo en el que está trabajando, independientemente de si está envuelto en una cláusula Try-Except , romperá completamente la omni-terminación. Debería ser bastante fácil verificar esto, ya que la mayoría de las importaciones ocurren al comienzo del archivo.

Si decides que este error es la causa de tus problemas, tus opciones incluyen:

  • asegurándose de que los módulos que importa estén en la ruta del sistema, no solo en los archivos del proyecto
  • comentar cualquier declaración de import que falle
  • arreglando el error
  • usando ropevim como su método de finalización
  • usando un editor diferente; Netbeans IDE tiene soporte para Python, y el plugin jVi es bastante bueno si eres un adicto a Vim como yo (no dejes que te engañe el aspecto de los años 90 de la página de inicio)

Habiendo actualizado a Fedora 16 (pero aún compilando vim desde la fuente), omni completado dejó de funcionar con el mismo mensaje que el anterior. Lo "arreglé" volviendo a mapear las teclas.

inoremap <C-space> <C-x><C-o>

en ~/.vimrc y ahora funciona de nuevo.


Parece que hace mucho que el que pregunta ha ido al lado oscuro *, pero por lo que vale, acabo de tener este síntoma, y ​​en mi caso la causa fue que un módulo que estaba usando dependía de Python 2.7, pero mi versión de Vim era compilado con Python 2.5.

Para diagnosticar lo intenté :python import mymodule , que falló con un error sobre la importación de un módulo dependiente. Luego, el :python import dependentmodule que falló con el siguiente paso en la cadena. Y así sucesivamente, hasta que falló al tratar de importar un módulo de sistema que era nuevo desde Python 2.7. Problema encontrado.

Para resolver, acabo de hacer sudo port install vim +python27 . Pero eso es para OSX. YMMV.

(* Estoy bromeando. Los usuarios de Emacs son nuestros amigos. Es la gente que programa en el Bloc de notas todos tenemos que guardar ...)


Si está usando python2, asegúrese de

sudo apt-get install vim.nox-py2

y use vim.nox-py2 en lugar de vim.


Tuve un problema similar con omni finalización no funciona. En mi caso, resultó que el complemento minibufexpl.vim estaba interfiriendo con la omni terminación. Así es como me enteré:

La finalización normal de palabras clave funciona. Omni completo no funciona para ningún idioma, no solo para Python. omnifunc está configurado correctamente. Después de I CX CO, no pasa nada. I do ": py print globals ()" y está claro que el pythoncomplete no estaba cargado. Puedo ": llamar a pythoncomplete # Complete (1, '''')" y ver que se cargue. Para mí, esto descarta que sea un problema de Vim. Parece que algo está interfiriendo con el mapeo de teclas o interceptando la solicitud de omni compleción. Así que empiezo a desactivar mis complementos uno por uno. Resulta que el culpable en mi caso es "minibufexpl". Tengo la versión Holgado de github.

Parece que hay muchos problemas abiertos con MBE de acuerdo con el rastreador de problemas en github y no ha habido ningún progreso desde principios de 2012. Voy a deshabilitarlo por ahora, así que puedo usar autocompletar. Mientras tanto, solo agregaré lo siguiente a mi vimrc para mantener abiertos varios búferes modificados al mismo tiempo y usar una secuencia de teclas simple para recorrerlos (MBE selecciona de manera más inteligente los búferes para recorrerlos pero parece demasiado torpe para un problema simple )

set hidden noremap <C-TAB> :bnext<CR> noremap <C-S-TAB> :bprev<CR>


Utilicé supertab (http://www.vim.org/scripts/script.php?script_id=1643)

Como Cx Co es un poco frustrante de usar

en .vimrc:

let g:SuperTabDefaultCompletionType = "<c-x><c-o>"

entonces solo usa Tabb para omnicompleción


cx cn funciona para obtener la lista de miembros de un objeto.