2011-01-17 18 views
5

Ich beginne mit der Verwendung von VIM, um Python zu programmieren. Ich bin auf einige Probleme gestoßen, hoffentlich kann mir jemand dabei helfen.VIM + Python - "gd" -Befehl funktioniert nicht richtig

Der Befehl "gd" soll Sie an die erste Stelle bringen, an der eine Variable in der aktuellen Funktion definiert/verwendet wird. Soweit ich weiß, ist es dasselbe wie "[[", um zum Anfang der Funktion zu gehen und dann nach dem Variablennamen zu suchen.

Problem ist, wenn ich dies in Python-Funktionen versuche, findet Vim das erste Vorkommen der Variablen in der gesamten Datei.

Irgendwelche Gedanken darüber, warum dies passiert/wie kann ich das beheben?

Antwort

3

Ich denke, das Problem liegt an der Art, wie Vim eine Funktion behandelt. Aus der Dokumentation für [[:

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

Es sei denn, ein Abschnitt irgendwie irgendwo speziell für Python-Dateien definiert ist (Ich bin nicht überzeugt, ist möglich, da sie nroff Abschnitte aus zwei Buchstaben sein soll sind), wird dies übernehmen dass es in der ersten Spalte eine offene Klammer geben sollte, die für Python-Dateien nicht relevant ist.

Ich würde vorschlagen, auf der Vim-Mailingliste zu fragen, ob es Plugins oder Work-Arounds dafür gibt. Alternativ können Sie eine Abbildung wie folgt definieren:

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

Diese eleganter mit einer Funktion durchgeführt werden konnte, aber das war nur eine schnelle Hack, funktionieren sollte. Es bildet gd auf eine Funktion, die Variable ‚varname‘ setzt das Wort zu halten, den Cursor auf, sucht rückwärts nach def und sucht dann nach vorne für die 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

"[[* * funktioniert in Python-Dateien zur Suche nach einer vorherigen def/class. Soweit ich das beurteilen kann, wird es in der Datei "python.vim" in ftplugin neu definiert, um einen "Python_sprung" auszuführen. Ein (verwandtes?) Problem besteht darin, dass "[[" im normalen Modus gut funktioniert, aber im visuellen Modus nicht gut funktioniert. Ich vermute, da ist nur ein Virus, aber ich hoffe immer noch, dass ich nur etwas verpasse und dumm bin. –

+0

Ich nehme an, '[[' funktioniert in Python-Dateien aufgrund einer benutzerdefinierten Zuordnung, aber 'gd' basiert auf der eingebauten Implementierung von' [[''. – DrAl

2

ich nicht varname in meinem Vim neu zu definieren haben Konfiguration, und es funktioniert gut, aber ich habe vim mit Python kompiliert. Vielleicht ist das das Problem?

Haben Sie VIM Version 7.x installiert, mit Python-Unterstützung kompiliert? Um dies zu prüfen, geben Sie :python print “hello, world” in VIM ein. Wenn Sie eine Fehlermeldung wie , sehen, dann ist es Zeit, eine neue zu bekommen.

+0

Das ist erstaunlich, ich wusste nicht, dass Sie einen beliebigen Interpreter über die Befehlszeile aufrufen können! Danke für den Tipp! Sie können auch überprüfen, was in vim kompiliert wurde, indem Sie ': version' eingeben und prüfen, ob das Python-Flag vorhanden ist. –

+0

Ich habe keine Python-Unterstützung. Ich bin unter Windows und habe einfach das einfache alte Installationsprogramm verwendet, das ich auf der vim-Download-Seite gefunden habe. Wie bekomme ich eine Version mit Python-Unterstützung? –

+0

Ich denke, der einfachste Weg ist, vorkonfigurieren und gebündelt mit verschiedenen Verbesserung vim von Creme. Es gibt "Windows Vim Installer ohne Cream" (Ich mag keine Cream Layout und alles ist gui Zeug - es verlangsamt mich, aber die Vim-Version, die damit einhergeht, ist gut). http://cream.sourceforge.net/download.html –

Verwandte Themen