Vim verwendet in Python-Dateien nicht den richtigen Einzug

7

Ich bin auf etwas gestoßen, das ich noch nie in Vim gesehen habe. Während ich versuchsweise einen Teil des Quellcodes für Software änderte, an der ich arbeiten wollte, bemerkte ich, dass vim einen falschen Abstand für die von mir hinzugefügte Codezeile anzeigte. Gedit zeigt den Code mit dem richtigen Abstand an. Ich weiß, dass Gedit den richtigen Abstand hat, da der Python-Code Fehler liefert, wenn ich den Code in Vim so ändere, dass er in das Vim-Fenster zu gehören scheint. Ich habe die Bilder unten angehängt. Die Zeile, die ich hinzugefügt habe, lautet: print "Ich bin dabei, eine Fakultät zu bewerten". Ich habe auch meine kurze .vimrc-Datei hinzugefügt. Hat das jemand gesehen? Ich benutze vim seit Monaten und kann mich nicht erinnern, dass so etwas jemals passiert ist.

  • Vim (falsch):

    Vim falsch

  • Gedit (richtig):

    Gedit richtig

  • Vimrc:

    Vimrc-Datei

BenB
quelle
3
Ich weiß, dass dies ein bisschen mühsam sein könnte, aber könnten Sie set list listchars=tab:>-das erste (Vim) Bild einschalten und erneut hochladen? Ich denke, es würde uns helfen zu sehen, was mit den Registerkarten los ist.
Tumbler41
Es sieht für mich so aus, als ob dein vimrc gut funktioniert. Die Registerkarte ist wie gewünscht 4 Leerzeichen. Der Rest des Dokuments verwendet jedoch nur Leerzeichen. Ich würde nur Leerzeichen in dieser Zeile verwenden, um das Problem zu beheben. Oder bleiben Sie auf jeden Fall konsistent zwischen der Verwendung von Tabulatoren und Leerzeichen zum Einrücken.
Tumbler41
Vielen Dank, dass Sie alle Räume genutzt haben. Ich bin jedoch überrascht, da ich erwarten würde, dass der Tab nicht anders interpretiert wird.
BenB

Antworten:

10

Es wird vom Python-Dateityp-Plugin zurückgesetzt. von /usr/share/vim/vim74/ftplugin/python.vim:

" As suggested by PEP8.
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8

Diese Datei wird jedes Mal geladen, wenn eine Python-Datei geladen wird. Persönlich finde ich das Hinzufügen von Einrückungseinstellungen hier allerdings etwas überraschend.

Um dies zu überschreiben, verwenden Sie dies auf jeden Fall in Ihrem vimrc:

augroup python
    autocmd!
    autocmd FileType python setlocal noet ts=4
augroup end

Dies wird nach der ftplugin-Datei geladen und überschreibt die dort festgelegten Einstellungen.

Persönlich würde ich empfehlen, keine Tabulatoren in Python-Dateien zu verwenden, da der Community-Standard darin besteht, Leerzeichen zu verwenden.

Martin Tournoij
quelle
Ja, stellen Sie sicher, dass Sie filetype plugin onin Ihrem vimrc haben. Ich würde das aber nicht überschreiben set tabstop=8. Der Grund ist hier
Antony
2

Die Lösung für mich bestand darin, diese Zeile nach dem Einfügen des Dateityp-Plugins in meine ~/.vimrcDatei hinzuzufügen

filetype plugin on
autocmd FileType python setlocal noexpandtab shiftwidth=4 softtabstop=4
Philippe Gachoud
quelle