Ich weiß, dass diese Frage oft gestellt wurde, aber ich finde keine Lösung für mein Problem, hauptsächlich, weil ich das Problem nicht einmal wirklich identifizieren kann.
Hier ist die Zeitleiste der Ereignisse:
- öffne alte python datei (geschrieben mit python2.7) - alles ist in ordnung
- Ändern Sie die Tastenkombinationen, um .py-Dateien mit python3 anstelle von python2.7 auszuführen - wie erwartet, viele
IndentError
s, aber die Datei hat immer noch die gleiche Struktur / das gleiche Layout / die gleiche Anzahl von Leerzeichen / Tabulatoren expandtab
zu meiner .vimrc-Datei hinzugefügt - jetzt gibt es keine Probleme mehrIndentError
mit Inkonsistenzen, sondernIndentError
überall neue, da die Struktur meines Quellcodes jetzt völlig durcheinander ist.- Ich entferne
expandtab
aus meiner .vimrc und bekomme immer noch das Gleiche aus der Quelle heraus, auch wenn ich die Sitzung töte, ganz iTerm, ziehe die Quelle frisch aus Github ... WARUM !?
Um ganz klar zu sein, es gibt nur ZWEI Dinge, die in meinem Vimrc in den letzten Monaten geändert wurden, und beide Änderungen wurden heute Morgen vorgenommen. Das erste war die Neuzuordnung <F9>
eines Shell-Befehls für python3 anstelle von 2.7, der sich NICHT auf die Struktur meines Quellcodes auswirkte. Die zweite Änderung war das Hinzufügen, expandtab
wodurch alles durcheinander gebracht wurde. Durch das Entfernen expandtab
wird meine VIM-Erfahrung nicht wieder so wie vor dem Hinzufügen.
Die strukturellen Änderungen an meiner Quelle sind halbgleichmäßig. Lassen Sie mich also versuchen, zu erklären, was tatsächlich passiert.
Was früher aussah:
class GUI():
def __init__(self):
suite of code
sieht jetzt so aus:
class GUI():
def __init__(self):
suite of code
und es ist auf der ganzen Linie so für alles, was wie alle verschachtelten Codesuiten aussieht ... mit anderen Worten, die erste Erweiterung von Tabulatoren in 4 Leerzeichen funktioniert einwandfrei, aber anstatt Tabulatoren zu erweitern, die weiter innerhalb des ersten Tabulators verschachtelt sind, sieht es so aus löscht stattdessen nur die Registerkarte.
Es sind noch andere seltsame Dinge im Gange, aber ich kann ein Muster nicht wirklich erkennen.
Irgendwelche Ideen, was los ist?
quelle
tabstop
8 geschrieben wurde. Vim wird entweder angezeigt oder erweitert, mit der Annahme, dasstabstop=4
. Haben Sie die Originalquelle von, bevor Sie die Dateien mit den falschen VIM-Einstellungen bearbeitet haben?tabstop=8
da ich die gleiche .vimrc (withtabstop=4
) hatte, bevor ich Python überhaupt kannte.tabstop=8
, ich kann die einzelnen Tabulatoren in den 8-stelligen Einzügen auswählen. Und Python im gemischten Einrückungsmodus behandelt Tabulatoren als acht Leerzeichen. Ich weiß nicht, wie Ihre vim-Konfiguration funktioniert hat, um es vorher zu zeigen.tabstop=4
stattdessen mit geschrieben worden wäre ? edit: oder soll ich einfachtabstop
wieder auf 8 wechseln ?%s/\t/(eight spaces)/g
. Sie sollten keine Tabulatoren im Python-Code haben.Antworten:
Dieses Erscheinungsbild ist normalerweise (und scheint in Ihrem Code der Fall zu sein) ein Symptom für das Betrachten von Code mit 4 Leerzeichen pro Einzug, aber 8-Leerzeichen-Tabulatoren in jeder anderen Zeile (z. B. 4s). 1t, 1t4s, 2t) mit einer
tabstop
Einstellung von 4.Für Python-Code sollten Sie einfach alle Tabulatoren im Code durch acht Leerzeichen ersetzen, da der Interpreter dies so behandelte. In der Regel kann man mit Situationen wie dieser umgehen , indem die Verwendung von
:retab
Befehl nach Einstellungtabstop
der Quellcode auf den Wert ursprünglich mit geschrieben wurde, so zBWenn
expandtab
gesetzt, werden Tabulatoren durch Leerzeichen ersetzt.quelle
:set tabstop=8
gefolgt von:retab!
und das hat die Magie. Nun zur nächsten Ausgabe des Versuchs, meine Pakete von meiner alten Version von Python in die neue zu integrieren: / Ich hätte den Hinweis "Immer mit einer virtuellen Umgebung installieren" vor langer Zeit beachten müssen. Ich verstehe immer noch nicht wirklich, wie das funktioniert.