2011-01-17 28 views
5

Estoy empezando a usar VIM para programar Python. Me he encontrado con algunos problemas, espero que alguien me pueda ayudar con esto.VIM + Python - El comando "gd" no funciona correctamente

Se supone que el comando "gd" lo lleva al primer lugar en el que se define/utiliza una variable en la función actual. Por lo que entiendo, es lo mismo que hacer "[[" "para ir a la parte superior de la función, y luego realizar una búsqueda del nombre de la variable.

El problema es que cuando pruebo esto en las funciones de Python, vim encuentra la primera aparición de la variable en todo el archivo.

¿Alguna idea de por qué sucede esto/cómo puedo solucionarlo?

Respuesta

3

Creo que el problema se debe a la forma en que Vim trata una función. A partir de la documentación de [[:

      *[[* 
[[   [count] sections backward or to the previous '{' in 
      the first column. |exclusive| 
      Note that |exclusive-linewise| often applies. 

A menos que una sección de alguna manera está definido específicamente para los archivos de pitón en alguna parte (no estoy convencido de que esto es posible, ya que se supone que deben ser de dos letras nroff secciones), esto va a suponer que debería haber un corchete abierto en la primera columna, que no es relevante para los archivos de Python.

Sugiero preguntar en la lista de correo de Vim para ver si hay algún complemento o solución alternativa para esto. Alternativamente, se podría definir un mapeo:

nmap gd :let varname = '\<<C-R><C-W>\>'<CR>?\<def\><CR>/<C-R>=varname<CR><CR> 

Esto podría hacerse más elegante con una función, pero esto fue sólo un truco rápido que debería funcionar. Al trazar gd a una función que establece la variable 'code' para mantener la palabra se encuentra el cursor, busca hacia atrás para def y luego busca en adelante para la variable:

:let varname =    " Variable setting 
    '\<      " String start and word boundary 
    <C-R><C-W>     " Ctrl-R, Ctrl-W: pull in the word under the cursor 
    \>'      " Word boundary and string end 
    <CR>      " Enter - finish this command 
    ?       " Search backwards for... 
    \<def\>     " def but not undefined etc (using word boundaries) 
    <CR>      " Enter - Perform search 
    /      " Now search forward 
    <C-R>=      " Pull in something from an expression 
    varname<CR>    " The expression is 'varname', so pull in the contents of varname 
    <CR>      " Enter - perform search 
+0

"[[" * does * funciona * en archivos Python para buscar una def/clase anterior. Por lo que puedo decir, se redefine en el archivo "python.vim" en ftplugin, para realizar un "salto de Python". Un problema (relacionado?) Es que, aunque "[[" funciona bien en modo normal, no funciona bien en modo visual. Supongo que solo hay un error ahí, pero todavía estoy esperando que me pierda algo y sea estúpido. –

+0

Supongo que '[[' funciona en archivos Python debido a una asignación personalizada, pero 'gd' se basa en la implementación incorporada de' [['. – DrAl

2

no me redefino nombre_var en mi Vim configuración, y funciona bien, pero he compilado vim con python. Quizás este es el problema?

¿Tiene instalada la versión 7.x de VIM, compilada con soporte Python? Para verificar esto, ingrese :python print “hello, world” en VIM. Si ve un mensaje de error como E319: Sorry, the command is not available in this version, , entonces es hora de obtener uno nuevo.

+0

Esto es increíble, ¡no sabía que pudiera invocar a ningún intérprete desde la línea de comandos! ¡Gracias por el consejo! También puede verificar lo que se ha compilado en vim escribiendo ': version' y comprobar que la bandera de python está presente. –

+0

No tengo soporte para Python. Estoy en Windows, y acabo de utilizar el viejo instalador simple que encontré en la página de descarga de vim. ¿Cómo obtengo una versión compatible con Python? –

+0

Creo que la forma más fácil es obtener preconfiguración y un paquete con varias mejoras vim de crema. Hay "instaladores de Windows Vim sin crema" (no me gusta el diseño de crema y todo lo de gui, me ralentiza, pero la versión vim que lo acompaña es buena). http://cream.sourceforge.net/download.html –

Cuestiones relacionadas