Wie mache ich vi - Vim verwendet niemals Tabulatoren (Konvertieren von Leerzeichen in Tabulatoren, schlecht!), Macht die Tabulatortaste == 4 Leerzeichen und rückt Code automatisch nach geschweiften Klammern ein, wie es Emacs tut?
Wie speichere ich diese Einstellungen, damit ich sie nie wieder eingeben muss?
Ich habe andere Fragen dazu gesehen, aber es scheint immer ein wenig von dem abzuweichen, was ich will.
vim
whitespace
indentation
vi
auto-indent
mmcdole
quelle
quelle
Antworten:
Wie in den folgenden Antworten bereits erwähnt, besteht die bevorzugte Methode jetzt NICHT darin, smartindent zu verwenden, sondern Folgendes (in Ihrer .vimrc ):
In Ihrer .vimrc: -Datei:Die Hilfedateien brauchen etwas Zeit, um sich daran zu gewöhnen, aber je mehr Sie lesen, desto besser wird Vim:
Noch besser ist, dass Sie diese Einstellungen aus Gründen der Portabilität in Ihre Quelle einbetten können:
So zeigen Sie Ihre aktuellen Einstellungen an:
Wie greywh in den Kommentaren hervorhebt, wurde smartindent durch cindent ersetzt, das "klüger funktioniert", obwohl es immer noch hauptsächlich für Sprachen mit C-ähnlicher Syntax gilt:
quelle
Verwandte Themen, wenn Sie eine Datei öffnen, die sowohl Tabulatoren als auch Leerzeichen verwendet, vorausgesetzt, Sie haben
Sie können alle Registerkarten durch Leerzeichen in der gesamten Datei ersetzen
quelle
Der beste Weg, um einen filetypspezifischen Einzug zu erhalten, ist die Verwendung
filetype plugin indent on
in Ihrem vimrc. Dann können Sie Dinge wie beispielsweiseset sw=4 sts=4 et
in .vim / ftplugin / c.vim angeben , ohne diese für alle zu bearbeitenden Dateien global machen zu müssen, und andere Syntaxen vom Typ C werden ebenfalls korrekt eingerückt (sogar Lisps) .quelle
Fügen Sie Folgendes in Ihre
~/.vimrc
Datei ein , um in den meisten Dateien Registerkarten mit 4 Leerzeichen, in Makefiles echte 8-Zeichen-Zeichen und in verschiedenen Dateien, einschließlich C / C ++, automatisch einzurücken :quelle
else
? Es scheint mir, als ob die letzten Zeilen das Makefile-spezifisch in allen Fällen überschreibenAuf vielen Linux-Systemen wie Ubuntu ist die
.vimrc
Datei standardmäßig nicht vorhanden. Es wird daher empfohlen, sie zuerst zu erstellen.Verwenden Sie nicht die
.viminfo
Datei, die im Home-Verzeichnis vorhanden ist. Es wird für einen anderen Zweck verwendet.Schritt 1: Gehen Sie zu Ihrem Home-Verzeichnis
cd ~
Schritt 2: Erstellen Sie die Datei
vim .vimrc
Schritt 3: Fügen Sie die oben angegebene Konfiguration hinzu
Schritt 3: Speichern Sie die Datei, indem Sie Shift+ drücken ZZ.
quelle
Shift + ZZ
es .swp Datei erstellen. verwendenwq
.Ctrl-Z
ist eine andere Geschichte ...)vim -n <file>
. Eine Auslagerungsdatei wird nicht zur Speicherzeit generiert. Das würde seinen Zweck so gut wie zunichte machen, da Swap-Dateien nützlich sind, um abrupt abgebrochene Bearbeitungssitzungen wiederherzustellen.Die empfohlene Methode besteht darin, einen auf Dateitypen basierenden Einzug zu verwenden und nur dann smartindent und cindent zu verwenden, wenn dies nicht ausreicht.
Fügen Sie Ihrer .vimrc Folgendes hinzu
Hoffe, es hilft als eine andere Antwort.
quelle
Bearbeiten Sie Ihre ~ / .vimrc
Fügen Sie folgende Zeilen hinzu:
quelle
Aus dem VIM-Wiki :
quelle
Der automatische Einzug basiert auf dem aktuellen Syntaxmodus. Ich weiß, wenn Sie Foo.java bearbeiten, dann geben Sie ein
{
und schlagenEnter Einzüge die folgende Zeile.Für Registerkarten gibt es zwei Einstellungen. Geben Sie in Vim einen Doppelpunkt und dann "set tabstop = 4" ein, wodurch die Tabulatoren als vier Leerzeichen angezeigt werden. Drücken Sie erneut den Doppelpunkt und geben Sie "set expandtab" ein, um Leerzeichen für Tabulatoren einzufügen.
Sie können diese Einstellungen in einer .vimrc (oder _vimrc unter Windows) in Ihrem Home-Verzeichnis ablegen, sodass Sie sie nur einmal eingeben müssen.
quelle
Verwenden Sie den TabSchlüssel in Vim nicht zum manuellen Einrücken. Vim verfügt über zwei Befehle im Einfügemodus zum manuellen Erhöhen oder Verringern des Einrückungsbetrags. Diese Befehle sind Ctrl-Tund Ctrl-D. Diese Befehle beachten Sie die Werte von
tabstop
,shiftwidth
undexpandtab
, und halten die richtige Mischung von Leerzeichen und Tabulatoren (maximale Anzahl von Registerkarten gefolgt von notwendigen Anzahl).Zweitens müssen diese manuellen Einrückungstasten ohnehin nicht sehr oft verwendet werden, wenn Sie die automatische Einrückung verwenden.
Wenn Ctrl-Tstatt Tabstört Sie, können Sie es neu zuordnen:
Sie können auch neu zuordnen Shift-Tab, um die Ctrl-DDeindent auszuführen:
Hier sind ^ T und ^ D Literalsteuerzeichen, die als eingefügt werden können Ctrl-VCtrl-T.
Mit dieser Zuordnung können Sie weiterhin Literal Tab in den Puffer eingeben Ctrl-VTab. Beachten Sie, dass Sie in diesem
:set expandtab
Fall , auch wenn diese Option aktiviert ist, ein nicht erweitertes Tabulatorzeichen erhalten.Ein ähnlicher Effekt wie bei der
<Tab>
Karte wird mit erzielt:set smarttab
, wodurch sich auch die Rücktaste an der Vorderseite einer Linie intelligent verhält.smarttab
Wenn im Modus Tabnicht am Zeilenanfang verwendet wird, hat dies keine besondere Bedeutung. Das unterscheidet sich von meiner obigen Zuordnung von Tabzu Ctrl-T, da eine Ctrl-Tirgendwo in einer Zeile verwendete (im Einfügemodus) die Einrückung dieser Zeile erhöht.Andere nützliche Zuordnungen können sein:
Jetzt können wir beispielsweise einige Zeilen auswählen und Tabdrücken, um sie einzurücken. Oder schlagenTab zweimal auf eine Zeile (im Befehlsmodus), um die Einrückung zu erhöhen.
Wenn Sie die richtigen Vertiefung Management - Befehle zur Verfügung , dann wird alles durch die drei Parameter gesteuert:
shiftwidth
,tabstop
undexpandtab
.Der
shiftwidth
Parameter steuert Ihre Einrückungsgröße. Wenn Sie vier Leerzeichen einrücken möchten, verwenden Sie:set shiftwidth=4
oder die Abkürzung:set sw=4
.Wenn nur dies getan wird, wird der Einzug mit einer Mischung aus Leerzeichen und Tabulatoren erstellt, da dies
noexpandtab
die Standardeinstellung ist. Verwenden:set expandtab
. Dies führt dazu, dass Tabulatorzeichen, die Sie in den Puffer eingeben, in Leerzeichen erweitert werden und Vim-verwaltete Einrückungen nur Leerzeichen verwenden.Wenn diese
expandtab
Option aktiviert ist und Sie Ihre Einrückung über alle geeigneten Vim-Mechanismen verwalten, ist der Wert vontabstop
irrelevant. Es steuert, wie Registerkarten angezeigt werden, wenn sie in der Datei vorkommen. Wenn Sieset tabstop=8 expandtab
eine feste Registerkarte haben und diese dann mit in die Datei schleichen Ctrl-VTab, wird wie gewohnt eine Ausrichtung zur nächsten 8-Spalten-basierten Registerkartenposition erstellt.quelle
<C-t>
kann diese Syntax anstelle von Literalen verwenden. Schließlich wird bei der Zuordnung<Tab>
im normalen Modus auch eine Zuordnung vorgenommen<C-i>
(es handelt sich um dasselbe Zeichen). Daher empfehle ich dies nicht (Sie verlieren eine raffinierte Vim-Funktionalität