Frage
Wie verhindere ich vim aus ersetzen Räume mit Tabs, wenn autoindent auf ist?
Ein Beispiel: Wenn ich zwei Registerkarten und 7 Felder am Anfang der Linie, und tabstop=3
, und ich drücken Sie die Eingabetaste, die nächste Zeile hat vier Registerkarten und 1 Platz am Anfang, aber ich will nicht. ..
Lösung
Es ist vielleicht eine gute Idee, nicht Tabs zu verwenden überhaupt.
:set expandtab
Wenn Sie alle Registerkarten in Ihrer Datei 3 Felder ersetzen (was ziemlich ähnlich aussehen tabstop=3
):
:%s/^I/ /
(wobei ^I
ist die TAB Zeichen)
Von der VIM-Online-Hilfe:
'tabstop' 'ts' number (default 8)
local to buffer
Number of spaces that a <Tab> in the file counts for. Also see
|:retab| command, and 'softtabstop' option.
Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).
There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
(or 3 or whatever you prefer) and use 'noexpandtab'. Then Vim
will use a mix of tabs and spaces, but typing <Tab> and <BS> will
behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
'expandtab'. This way you will always insert spaces. The
formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
|modeline| to set these values when editing the file again. Only
works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
'noexpandtab'. This should then work (for initial indents only)
for any tabstop setting that people use. It might be nice to have
tabs after the first non-blank inserted as spaces if you do this
though. Otherwise aligned comments will be wrong when 'tabstop' is
changed.
Andere Tipps
alles, was ich will, ist die autoindented Linie genau wie die vorherige Zeile die gleiche Vertiefung Zeichen haben.
:help copyindent
'copyindent' 'ci' boolean (default off); lokal zu puffern; {Nicht in Vi}
Kopieren Sie die Struktur der bestehenden Linien einzurücken, wenn ein autoindenting Neue Zeile. Normalerweise wird der neue Gedankenstrich wird durch eine Reihe von rekonstruiert gefolgt Laschen durch Leerzeichen nach Bedarf (es sei denn, ‚expandtab‘ aktiviert ist, in diesem Fall werden nur Leerzeichen verwendet). Das Aktivieren dieser Option macht die neue Zeile kopieren, was auch immer Zeichen für Einrücken auf die verwendet wurden, bestehende Linie. Wenn der neue Gedankenstrich größer ist als auf dem bestehenden Linie, der verbleibende Raum in der normalen Art und Weise gefüllt ist.
Hinweis: 'copyindent' wird zurückgesetzt, wenn 'kompatibel' gesetzt.
Siehe auch 'preserveindent' .
:help preserveindent
'preserveindent' 'pi' a href <= "http://www.vim.org/htmldoc/options. html # boolean“rel = "noreferrer"> boolean (default off); lokal zu puffern; {Nicht in Vi}
Wenn Sie den Einzug der aktuellen Zeile zu ändern, zu bewahren, so viel von der indent Struktur wie möglich. Normalerweise wird der Gedankenstrich durch eine ersetzt nach Bedarf Reihe von durch Leerzeichen gefolgt Laschen (es sei denn, ‚expandtab‘ aktiviert, wobei in diesem Fall nur Leerzeichen verwendet werden). Das Aktivieren dieser Option bedeutet der Einzug als viele bestehende Zeichen wie möglich erhalten werden für Einrücken und fügen Sie nur zusätzliche Tabulatoren oder Leerzeichen nach Bedarf.
Hinweis: Bei der Verwendung von „>>“ mehrmals der resultierenden Gedankenstrich ist eine Mischung aus Laschen und Räume. Vielleicht möchten Sie diese nicht.
HINWEIS: 'preserveindent' wird zurückgesetzt, wenn 'kompatibel' gesetzt
. Auch finden Sie unter 'copyindent' .
Verwendung:. Retab weißen Raum aufzuräumen
Sie können alle TAB
konvertieren SPACE
:set et
:ret!
oder alle SPACE
konvertieren TAB
:set et!
:ret!
Hier ist ein Teil meiner .vimrc
:
set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4
Das funktioniert gut für mich, weil ich unbedingt in meinem Quellcode nicht will Registerkarten. Es scheint, aus Ihrer Frage, dass Sie zwei Registerkarten und sieben Räume in der nächsten Zeile halten wollen, und ich bin nicht sicher, ob es einen Weg gibt vim zu lehren, dass Stil gerecht zu werden.
Vielleicht ist der Boden dieser kann Ihnen helfen?
Standard vi interpretiert die Tabulatortaste wahrsten Sinne des Wortes, aber es gibt beliebte vi abgeleiteten Alternativen, die klüger sind, wie vim. Um vim Registerkarte als `` Gedankenstrich ‚‘ Befehl anstelle eines Einsatzes-a-Register-Befehl zu interpretieren, dies zu tun:
set softtabstop=2
Wenn Sie alle Registerkarten ersetzen möchten mit Leerzeichen auf der Grundlage der Einstellung von ‚ts‘ können Sie verwenden: retab. Es kann auch das Gegenteil tun.