Wie vim zu konfigurieren, dass keine Kommentare während der Bearbeitung Python-Dateien am Anfang der Linien setzen

stimmen
47

Wenn ich einen # im Einfügemodus in eine leere Zeile in Vim hinzufügen, während Python-Dateien bearbeiten, bewegt sich vim die # an den Anfang der Zeile, aber ich würde die # auf der Registerkarte Ebene eingefügt werden möchte, wo ich es eingegeben.

Zum Beispiel, wenn das Schreiben dieses in vim

for i in range(10):
    #

die # bleiben nicht dort, wo ich es betrat.

Es ist wie so bewegt, von Vim.

for i in range(10):
#

Kennt jemand ein Konfigurationselement in vim, dass sich dies ändern würde?

Wenn es hilft, bin ich mit Ubuntu 8.10.

Veröffentlicht am 09/12/2008 um 21:21
quelle vom benutzer
In anderen Sprachen...                            


8 antworten

stimmen
31

Ich fand hier eine Antwort http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash

Es scheint, dass die vim smartindent Option die Ursache des Problems ist. Die betroffene Seite oben beschriebene Arbeit-a-Runden, aber nachdem die Hilfe in smartindent in vim Lesen selbst (: help smartindent), entschied ich mich cindent statt smartindent zu versuchen.

ich ersetzte

set smartindent

mit

set cindent

in meiner .vimrc Datei

und so weit es funktioniert perfekt.

Dies änderte sich auch das Verhalten der ‚<<‘ festgelegt und ‚>>‘ für Einrücken visuellen Blöcke, die Python-Kommentare enthalten.

Es gibt mehr Konfigurationsoptionen für und Informationen über die Vertiefung in der vim Hilfe für smartindent und cindent (: help smartindent und: help cindent).

Beantwortet am 09/12/2008 um 23:07
quelle vom benutzer

stimmen
19

@PolyThinker Obwohl ich sehe, dass Antwort viel auf diese Frage, meiner Meinung nach ist es keine gute Lösung. Der Herausgeber glaubt immer noch, sollte es den ganzen Weg eingerückt werden nach links - das überprüfen, indem == auf einer Linie, die mit einem Hash beginnt, oder drücken = während ein Code-Block mit Kommentaren darin hervorgehoben, um reindent schieben.

Ich würde empfehlen filetype indent on, und entfernen Sie die set smartindentund set autoindent(oder set cindent) Linien von Ihrem vimrc. Jemand anderes (appparently David Bustos) war nett genug , um eine vollständige Vertiefung Parser für uns zu schreiben; es wird bei $ VIMDIRECTORY / indent / python.vim entfernt.

(Paul - cindentLösung funktioniert wahrscheinlich für Python, aber filetype indent onist viel allgemeiner nützlich.)

Beantwortet am 22/04/2009 um 15:07
quelle vom benutzer

stimmen
10

Ich habe die folgenden Zeilen in meinem .vimrc scheint standardmäßig mit meinem Ubuntu 8.10 installiert werden

set smartindent
inoremap # X^H#
set autoindent

Und ich beobachte das Problem nicht. Vielleicht können Sie dies versuchen. (Man beachte, daß H ^ von Ctrl-V Ctrl-H eingegeben werden soll)

Beantwortet am 22/12/2008 um 08:27
quelle vom benutzer

stimmen
4

Meine Lösung für das unindenting von #:

Wenn Sie cindent verwenden, erkennen, dass es für C und C ++ entwickelt wird Codierung. Hier bedeutet ein # Sie eine #DEFINE oder #macro () erstellen, so das Verhalten korrekt ist. Aber für andere Sprachen, in denen # ein Kommentar ist, ist es irritierend.

Die folgende arbeitete für mich:

" cindent       enable specific indenting for C code
" set cin       nocin
set cin

" cinkeys       The default cinkeys causes leading # to unindent to column 0.
"               To prevent this, remove the 0# from the definition.
" set cinkeys=0{,0},0),:,0#,!^F,o,O,e - default
set cinkeys=0{,0},0),:,!^F,o,O,e
Beantwortet am 15/05/2014 um 16:57
quelle vom benutzer

stimmen
2

Einige der anderen Antworten waren nützlich, aber keine war genug Vim, um zu verhindern reindenting eine Linie, wenn ‚#‘ ist das erste Zeichen. PolyThinker Antwort nicht für mich arbeiten, aber es gab einen Hinweis, dass ‚#‘ neu zugeordnet werden könnte, um „ein Zeichen einfügen, dann #, löschen Sie die zusätzlichen Zeichen und setzen Sie den Cursor, wo es sein sollte“. Dies ist die Abbildung, die das tut:

inoremap # X#<left><backspace><right>

Dies ist notwendig, weil vim Syntax Pakete scheinen ‚#‘ als Sonderzeichen zu behandeln, unabhängig davon, wie die Optionen festgelegt werden. Ich möchte eine Zeile mit ‚#‘ begann mit einem anderen Charakter begonnen die gleiche wie eine Linie zu sein. Die zuverlässigste Lösung, die ich gefunden habe, ist die obige Abbildung, die tatsächlich die erste Zeichen der Zeile ändert.

Hinweis: Ich habe festgestellt diese Zuordnung verursacht Probleme nach dem Ausführen I#<esc>dann die Taste „“ das vorherige Einsetzen zu wiederholen. Ich habe nicht eine Lösung noch nicht gefunden.

Beantwortet am 20/09/2017 um 05:07
quelle vom benutzer

stimmen
2

Es wird von der ‚smartindent‘ -Funktion verursacht. Wenn Sie :set smartindentin Ihrem .vimrc müssen Sie es entfernen.

Beantwortet am 22/12/2008 um 03:13
quelle vom benutzer

stimmen
1

Meine Vim - Konfiguration macht das nicht. Sie könnten das python.vim Skript von diesem Link versuchen: http://www.vim.org/scripts/script.php?script_id=790

Beantwortet am 09/12/2008 um 22:18
quelle vom benutzer

stimmen
0

Ich entfernte set smartindentaus , ~/.vimrcaber es hat immer noch nicht smartindent deaktivieren. Wenn ich eine Py - Datei geöffnet und lief :set smartindent?es angezeigt smartindent.

Es stellte sich heraus , dass weiter unten in der ~/.vimrcwar diese Zeile:

autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
                         ^^^^^^^^^^^

Sobald ich „smartindent“ aus dieser Zeile gelöscht, dann wurde smartindent schließlich deaktiviert und meine Kommentare waren wieder richtig eingezogen.

Beantwortet am 04/06/2014 um 19:38
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more