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

2151voto

Ken Punkte 73996

Wie bereits in einigen anderen Antworten erwähnt wurde, ist die bevorzugte Methode jetzt NICHT die Verwendung von smartindent, sondern die Verwendung der folgenden (in Ihrem .vimrc ):

filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab

~~In Ihrer [.vimrc:][1] Datei:

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

Die Hilfedateien sind etwas gewöhnungsbedürftig, aber je mehr Sie lesen, desto besser wird Vim:

:help smartindent

Noch besser ist, dass Sie diese Einstellungen in Ihren Quellcode einbetten können, um sie zu übertragen:

:help auto-setting

Um Ihre aktuellen Einstellungen zu sehen:

:set all

Comme greywh weist in den Kommentaren darauf hin, dass smartindent durch cindent ersetzt wurde, das "geschickter arbeitet", wenn auch immer noch hauptsächlich für Sprachen mit C-ähnlicher Syntax:

:help C-indenting~~

0 Stimmen

Danke - smartindent (als Name) war neu für mich. Ich hatte nicht herausfinden können, welche Option unter MacOS X den gewünschten Effekt hat.

0 Stimmen

Selbst mit diesen Einstellungen wird, wenn ich in einer mit Leerzeichen eingerückten Zeile "o" drücke, die neue Zeile mit Tabulatoren eingerückt :-( Wie kann ich dieses Verhalten ändern?

4 Stimmen

Wenn Sie expandtab eingestellt haben, sollte es Leerzeichen verwenden. Haben Sie auch "kompatibel" eingestellt? Das hat verschiedene Nebeneffekte, darunter das Zurücksetzen von expandtab auf den Standardwert "off".

280voto

netjeff Punkte 7770

Wenn Sie eine Datei öffnen, in der sowohl Tabulatoren als auch Leerzeichen verwendet werden, können Sie, vorausgesetzt, Sie haben

set expandtab ts=4 sw=4 ai

Sie können alle Tabulatoren in der gesamten Datei durch Leerzeichen ersetzen mit

:%retab

11 Stimmen

FYI, wenn Sie nicht möchten, dass Ihre Tabulatoren durch Leerzeichen ersetzt werden, entfernen Sie die Zeile expandtab.

7 Stimmen

Sind Tabulatoren nicht Leerzeichen? ;-)

13 Stimmen

@Rob-Wells: Ich habe "Whitespace" in "Leerzeichen" geändert. Bist du jetzt zufrieden? ;-)

93voto

graywh Punkte 9143

Der beste Weg, um eine Dateityp-spezifische Einrückung zu erhalten, ist die Verwendung von filetype plugin indent on in Ihrer vimrc. Dann können Sie Dinge angeben wie set sw=4 sts=4 et in .vim/ftplugin/c.vim, zum Beispiel, ohne dass diese für alle bearbeiteten Dateien global gemacht werden müssen, und andere Syntaxen, die nicht vom Typ C sind, werden ebenfalls korrekt eingerückt (lispelt sogar) .

10 Stimmen

IMHO besser als die Antwort, die als richtig markiert wurde. filetype indent on ersetzt cindent und smartindent.

75voto

Shervin Emami Punkte 2605

Um 4-Leerzeichen in den meisten Dateien, echte 8 breite Tabulatoren in Makefiles und automatische Einrückung in verschiedenen Dateien, einschließlich C/C++, zu haben, fügen Sie dies in Ihr ~/.vimrc Datei:

" Only do this part when compiled with support for autocommands.
if has("autocmd")
    " Use filetype detection and file-based automatic indenting.
    filetype plugin indent on

    " Use actual tab chars in Makefiles.
    autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab
endif

" For everything else, use a tab width of 4 space chars.
set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.
set shiftwidth=4    " Indents will have a width of 4.
set softtabstop=4   " Sets the number of columns for a TAB.
set expandtab       " Expand TABs to spaces.

1 Stimmen

Warum brauchen Sie nicht eine else ? Es scheint mir, dass die letzten Zeilen das makefile-spezifische in allen Fällen überschreiben

8 Stimmen

Hallo @lucidbrot, die Anweisung "autocmd FileType make" teilt vim im Grunde einige Einstellungen mit, die er verwenden soll, wenn er ein Makefile öffnet. Während die Zeilen darunter die Standardeinstellungen festlegen. Mit anderen Worten, die "tabstop=8 ..."-Einstellungen werden später angewendet, wenn die Datei geöffnet wird, und überschreiben die "tabstop=4 ..."-Einstellungen, die bei der Initialisierung gelten.

2 Stimmen

+1 dafür, dass es erweiterbar ist. Ich habe mich für diese Lösung entschieden, weil die Kommentare zu den einzelnen Teilen es mir ermöglichen, die Dinge genau so einzurichten, wie ich es möchte (ohne etwas kaputt zu machen), weil ich weiß, was alles gemacht wird. Hurra!

66voto

Erick Punkte 1308

Auf vielen Linux-Systemen, wie Ubuntu, ist die .vimrc ist standardmäßig nicht vorhanden, daher wird empfohlen, sie zuerst zu erstellen.

Verwenden Sie nicht die .viminfo Datei, die im Home-Verzeichnis existiert. Sie wird für einen anderen Zweck verwendet.

Schritt 1: Wechseln Sie in Ihr Home-Verzeichnis

cd ~

Schritt 2: Erstellen der Datei

vim .vimrc

Schritt 3: Fügen Sie die oben genannte Konfiguration hinzu

filetype plugin indent on
set tabstop=4
set shiftwidth=4
set expandtab

Schritt 3: Speichern Sie die Datei, indem Sie auf Shift + ZZ .

14 Stimmen

Nicht verwenden Shift + ZZ Es wird eine .swp-Datei erstellt. wq .

8 Stimmen

@shas: "ZZ" ist gleichbedeutend mit ":x". , was dasselbe ist wie ":wq", nur dass es nur speichert, wenn die Datei geändert wurde... ( Ctrl-Z ist eine andere Geschichte...)

2 Stimmen

@shas Das stimmt einfach nicht. Wenn Sie keine Auslagerungsdatei für eine Bearbeitungssitzung wollen, müssen Sie vim -n <file> . Eine Auslagerungsdatei wird nicht zum Zeitpunkt des Speicherns erzeugt; das würde ihren Zweck zunichte machen, da Auslagerungsdateien bei der Wiederherstellung von abrupt beendeten Bearbeitungssitzungen nützlich sind.

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