2011-01-17 17 views
5

Ho iniziato a utilizzare VIM per programmare Python. Ho incontrato alcuni problemi, spero che qualcuno possa aiutarmi con questo.VIM + Python - Il comando "gd" non funziona correttamente

Il comando "gd" dovrebbe portarti al primo posto in cui una variabile è definita/utilizzata nella funzione corrente. Da quello che capisco, è come fare "[[" per andare all'inizio della funzione, quindi eseguire una ricerca per il nome della variabile.

Il problema è che quando provo questo in funzioni Python, vim trova la prima occorrenza della variabile nell'intero file.

Qualche idea sul perché questo accade/come posso risolvere questo problema?

risposta

3

Penso che il problema sia dovuto al modo in cui Vim tratta una funzione. Dalla documentazione per [[:

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

A meno che una sezione è in qualche modo definito specificamente per i file Python da qualche parte (non sto convinto che questo sia possibile in quanto si suppone essere di due lettere nroff sezioni), questo assumerà che ci dovrebbe essere una parentesi aperta nella prima colonna, che non è rilevante per i file python.

Suggerisco di chiedere sulla mailing list di Vim per vedere se ci sono plugin o soluzioni per questo. In alternativa, è possibile definire una mappatura come questo:

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

Questo potrebbe essere fatto in modo più elegante di una funzione, ma questo era solo un trucco veloce che dovrebbe funzionare. Si associa gd a una funzione che imposta la 'nomevariabile' variabile per contenere la parola il cursore è attivo, la ricerca all'indietro per definizione e quindi cerca in avanti per la variabile:

: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

"[[" * fa * funziona in file Python per cercare una def/classe precedente. Da quello che posso dire, viene ridefinito nel file "python.vim" in ftplugin, per eseguire un "Python_jump". Un problema (correlato?) È che, mentre "[[" funziona correttamente in modalità normale, non funziona bene in modalità visuale. Immagino che ci sia solo un insetto lì, ma continuo a sperare che mi manchi solo qualcosa ed essere stupido. –

+0

Immagino che '[[' funzioni in file Python a causa di un mapping personalizzato, ma 'gd' è basato sull'implementazione incorporata di' [['. – DrAl

2

non ho ridefinire nomevar nel mio Vim configurazione, e funziona bene, ma ho compilato vim con python. Forse questo è il problema?

Avete installato VIM versione 7.x, compilato con supporto Python? Per verificare ciò, immettere :python print “hello, world” in VIM. Se viene visualizzato un messaggio di errore come E319: Sorry, the command is not available in this version, , è ora di acquistarne uno nuovo.

+0

Questo è sorprendente, non sapevo che potessi invocare qualsiasi interprete dalla riga di comando! Grazie per il consiglio! Puoi anche controllare cosa è stato compilato in vim digitando ': version' e verifica che il flag python sia presente. –

+0

Non ho il supporto per Python. Sono su Windows e ho appena usato il semplice vecchio programma di installazione che ho trovato nella pagina di download di vim. Come ottengo una versione con supporto Python? –

+0

Penso che il modo più semplice sia quello di ottenere la preconfigurazione e il bundle con vari miglioramenti da vim a crema. C'è "Windows Vim installers senza Cream" (non mi piace il layout della crema e tutto ciò che è gui - mi rallenta, ma la versione vim che ne consegue è buona). http://cream.sourceforge.net/download.html –