1435 Stimmen

Tabulator-Taste == 4 Leerzeichen und automatischer Einzug nach geschweiften Klammern in Vim

Wie kann ich die vi - Vim verwendet niemals Tabulatoren (konvertiert Leerzeichen in Tabulatoren, schlecht!), macht die Tabulatortaste == 4 Leerzeichen und rückt automatisch Code nach geschweiften Klammern ein wie Emacs tut?

Und wie speichere ich diese Einstellungen, damit ich sie nie wieder eingeben muss?

Ich habe schon andere Fragen zu diesem Thema gesehen, aber es scheint immer ein wenig von dem entfernt zu sein, was ich will.

3 Stimmen

37voto

Chaudhry Junaid Punkte 272

Es wird empfohlen, die auf dem Dateityp basierende Einrückung zu verwenden und smartindent und cindent nur dann einzusetzen, wenn dies nicht ausreicht.

Fügen Sie Folgendes zu Ihrer .vimrc hinzu

set expandtab
set shiftwidth=2
set softtabstop=2
filetype plugin indent on

Ich hoffe, es hilft als eine andere Antwort.

19voto

Yusuf Ibrahim Punkte 1501

Bearbeiten Sie Ihre ~/.vimrc

$ vim ~/.vimrc

folgende Zeilen hinzufügen:

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab

17voto

User Punkte 21953

Von der VIM-Wiki :

:set tabstop=4
:set shiftwidth=4
:set expandtab

11voto

Joey Gibson Punkte 7084

Die automatische Einrückung basiert auf dem aktuellen Syntaxmodus. Ich weiß, wenn Sie Foo.java bearbeiten, dann geben Sie eine { und schlagen Enter rückt die folgende Zeile ein.

Bei den Registerkarten gibt es zwei Einstellungen. Geben Sie in Vim einen Doppelpunkt und dann "set tabstop=4" ein, was die Tabulatoren so einstellt, dass sie mit vier Leerzeichen angezeigt werden. Drücken Sie erneut den Doppelpunkt und geben Sie "set expandtab" ein, was Leerzeichen für Tabulatoren einfügt.

Sie können diese Einstellungen in einer .vimrc (oder _vimrc unter Windows) in Ihrem Home-Verzeichnis ablegen, so dass Sie sie nur einmal eingeben müssen.

2voto

Kaz Punkte 51547

Erstens: Verwenden Sie nicht die Tab Taste in Vim für die manuelle Einrückung. Vim hat ein Paar Befehle im Einfügemodus, um den Einrückungsgrad manuell zu erhöhen oder zu verringern. Diese Befehle sind Ctrl-T y Ctrl-D . Diese Befehle beobachten die Werte von tabstop , shiftwidth y expandtab und halten Sie die richtige Mischung aus Leerzeichen und Tabulatoren ein (maximale Anzahl von Tabulatoren gefolgt von der erforderlichen Anzahl von Leerzeichen).

Zweitens müssen diese manuellen Einrückungstasten ohnehin nicht sehr oft verwendet werden, wenn Sie die automatische Einrückung verwenden.

Si Ctrl-T anstelle von Tab stört, können Sie es umstellen:

:imap <Tab> ^T

Sie können auch neu zuordnen Shift-Tab um die Ctrl-D deindent:

:imap <S-Tab> ^D

Hier sind ^T und ^D wörtliche Steuerzeichen, die wie folgt eingefügt werden können Ctrl-VCtrl-T .

Mit dieser Zuordnung können Sie immer noch ein Tabulatorzeichen in den Puffer eingeben, indem Sie Ctrl-VTab . Beachten Sie, dass Sie dies tun, auch wenn :set expandtab eingeschaltet ist, erhalten Sie ein nicht expandiertes Tabulatorzeichen.

Ein ähnlicher Effekt wie bei der <Tab> Karte wird erreicht durch :set smarttab , was auch dazu führt, dass sich die Rücktaste am Anfang einer Zeile intelligent verhält.

En smarttab Modus, wenn Tab nicht am Anfang einer Zeile verwendet wird, hat es keine besondere Bedeutung. Das ist ein Unterschied zu meiner obigen Zuordnung von Tab à Ctrl-T denn ein Ctrl-T an beliebiger Stelle in einer Zeile (im Einfügemodus) verwendet, wird die Einrückung dieser Zeile erhöht.

Andere nützliche Zuordnungen können sein:

:map <Tab> >
:map <S-Tab> <

Jetzt können wir z. B. einige Zeilen auswählen und auf Tab um sie einzurücken. Oder drücken Sie Tab zweimal in einer Zeile (im Befehlsmodus), um die Einrückung zu erhöhen.

Wenn Sie die richtigen Befehle zur Verwaltung der Einrückung verwenden, wird alles durch die drei Parameter gesteuert: shiftwidth , tabstop y expandtab .

El shiftwidth Parameter steuert die Größe der Einrückung; wenn Sie vier Leerzeichen als Einrückung wünschen, verwenden Sie :set shiftwidth=4 oder die Abkürzung :set sw=4 .

Wenn nur dies getan wird, dann wird die Einrückung mit einer Mischung aus Leerzeichen und Tabulatoren erzeugt, weil noexpandtab ist die Standardeinstellung. verwenden :set expandtab . Dies bewirkt, dass Tabulatorzeichen, die Sie in den Puffer eingeben, zu Leerzeichen expandieren, und dass die von Vim verwaltete Einrückung nur Leerzeichen verwendet.

Cuando expandtab eingeschaltet ist, und wenn Sie Ihre Einrückung durch alle geeigneten Vim-Mechanismen verwalten, wird der Wert von tabstop wird irrelevant. Sie steuert, wie Tabulatoren erscheinen, wenn sie in der Datei vorkommen. Wenn Sie set tabstop=8 expandtab und schleichen Sie dann einen harten Tabulator in die Datei mit Ctrl-VTab wird wie üblich eine Ausrichtung an der nächsten 8-spaltigen Tabulatorposition vorgenommen.

0 Stimmen

Alle Ihre Mappings sollten die nicht-rekursiven Varianten verwenden. Abbildung go <C-t> können diese Syntax anstelle von Literalen verwenden. Schließlich wird die Abbildung <Tab> im normalen Modus wird auch <C-i> (sie sind das gleiche Zeichen), also empfehle ich das nicht (Sie verlieren ein nettes Stück Vim-Funktionalität

1 Stimmen

@D.BenKnoble Ich empfehle nichts davon; ich selbst benutze Strg-T, Strg-D und < >. Das ist die Verwendung von Vim wie vorgesehen. Leute, die es gewohnt sind, die Tabulatortaste in anderen Editoren zu benutzen, mögen das vielleicht nicht, das ist alles.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X