Mit einem Tastendruck die mit "Leertaste" markierte "Registerkarte" in Vim löschen

12130
Evgeny

Ich bearbeite Python- Code mit Vim.

Mit dem tabSchlüssel bekomme ich vier Leerzeichen für die Einrückung. Wie kann ich diese Leerzeichen mit einem "Backspace" (?) - Strich löschen - anstatt mit vier?

Es muss eine "Set" -Option dafür geben ...

Hier ist mein .vimrc:

set autoindent set ts=4 set sw=4 set et 
18

8 Antworten auf die Frage

29
sf17k
set softtabstop=4 
IMO das ist genau das, wonach das OP gefragt hat. Verdient mehr Upvotes. Ludwig Weinzierl vor 12 Jahren 10
Das ist die richtige Antwort. mk12 vor 11 Jahren 2
Wußte nichts davon und genau das war es, wonach ich gesucht hatte. +1 NigoroJr vor 8 Jahren 1
23
Greg Hewgill

Sie können Ctrl+Deinen Tabulatorstop sichern. Dadurch wird die gesamte Zeile um einen Tabstopp nach links verschoben. Ctrl+Tmacht das Gleiche nach rechts. Beachten Sie, dass diese Tastatureingaben nur im Einfügemodus funktionieren (verwenden Sie <<und >>für das Äquivalent im Befehlsmodus).

4
Orwellophile

tl; dr: set tabstop=4 softtabstop=-1 shiftwidth=0 expandtab

Kurzform: set ts=4 sts=-1 sw=0 et

Erläuterung

Wenn Sie softtabstop(oder sts) -1einstellen, verhält es sich automatisch wie tabstop( ts), was Ihnen viel Ärger erspart, wenn Sie die Tabulatur stark wechseln. Wenn Sie shiftwidth( sw) auf setzen, 0sollte dies auch tabstopgenauso sein.

Im Detail

shiftwidth sw

Anzahl der Leerzeichen, die für jeden Schritt des (automatischen) Einzugs verwendet werden sollen. Verwendet für cindent, >>, <<usw.
Wenn Null der tabstopWert verwendet wird.

tabstop ts

Anzahl der Leerzeichen, für die a in der Datei zählt. Siehe auch : Befehl und softtabstopOption.

softtabstop sts

Anzahl der Leerzeichen, für die ein TabZähler beim Ausführen von Bearbeitungsvorgängen zählt, z. B. Einfügen eines Taboder Verwendung von BS. Es fühlt sich an, als würden Tabs eingefügt, während tatsächlich eine Mischung aus Leerzeichen und s verwendet wird. Dies ist nützlich, um die tabsis-Einstellung auf ihrem Standardwert zu behalten, während Sie die Bearbeitung so vornehmen können, wie sie eingestellt ist sts. Bei einem stsnegativen Wert shiftwidthwird der Wert von verwendet. Dies erspart Ihnen Ärger, wenn Sie die Tabstops stark wechseln. Wenn expandtabnicht festgelegt ist, wird die Anzahl der Leerzeichen mit Tabs minimiert .

expandtab et

Im Einfügemodus: Verwenden Sie die entsprechende Anzahl von Leerzeichen, um a einzufügen. Leerzeichen werden in Einzüge mit den verwendeten >und <Befehle und wenn autoindenteingeschaltet ist. expandtabVerwenden Sie zum Einfügen eines echten Registers Ctrl- V Tab. Siehe auch : retab

Ordentlich, ich benutze vim seit Jahren, aber die Vererbung von sts / sw / ts fiel mir nie auf. timss vor 6 Jahren 0
2
Heptite

Ich habe GreedyBackspace.vim für jemanden geschrieben, der so etwas wollte. Ich benutze es nicht persönlich, also ist es schon eine Weile her, seit ich es aktualisiert habe. Ich habe jedoch in letzter Zeit keine Fehlerberichte darüber erhalten.

1
Rook

Mehrere Möglichkeiten:

  1. Sie können alle Whitespaces umbenennen, damit sie durch Tabulatoren ersetzt werden. Auf diese Weise könnten sie leicht gelöscht werden.
  2. Du könntest (das ist nicht getestet, also schlage ich hier nur Ideen vor) eine Funktion erstellen, die im Normalmodus 4 mal die Rücktaste ausführt. Dann ordnen Sie es etwas zu. Es hat jedoch keine Möglichkeit zu wissen, ob Leerzeichen oder wichtige Zeichen gelöscht werden. Dies ist daher potenziell unsicher.
  3. '4X' löscht die letzten 4 Zeichen (das ist ein großes X, kein kleines, ein kleines Zeichen wirkt wie die Entf-Taste).
0
vimmer

Am einfachsten ist es <<, mit a zu wiederholen.

Hallo und herzlich willkommen bei Superuser. Obwohl ich damit einverstanden bin, dass Ihre Antwort selbst ein vi-Benutzer ist. Ihre Antwort ist kurz und erklärt nicht, warum Sie vorschlagen, was Sie vorschlagen, und warum Sie nichts vorschlagen, das der gestellten Frage entspricht. Mogget vor 8 Jahren 0
-1
nik

Wurde in Ihrem VIM mit der Einstellung der Registerkarte "Erweitert" geprüft ?

:set noet 

Ich ziehe es vor, die Tabs während der Arbeit an den Dateien zu behalten.
Wenn es erforderlich ist, ersetze ich die Registerkarten durch 4 oder so viele Leerzeichen wie erforderlich.

:%s/<ctrl+V><tab>/ /g ---- 

Als kleiner Bonus ist Ihre Quelldatei um 3 Zeichen pro Tab kürzer :-)

Oh, ich habe et, weil ich Tabs erweitern muss - ich denke - weil der Code, den ich bearbeite, ursprünglich so geschrieben wurde. jetzt folge ich nur dieser Konvention. Evgeny vor 14 Jahren 0
Sie könnten immer noch tun, was ich sage, und Leerzeichen am Ende wiederherstellen (wenn Sie die Datei an das Repository zurückgeben müssen) nik vor 14 Jahren 0
Vielleicht könnten Sie eine Vim-Funktion haben, die sie beim Öffnen auf Registerkarten erweitert und beim Schließen auf Leerzeichen reduziert hat? Hat jemand Ideen? sixtyfootersdude vor 14 Jahren 0
Dies ist eine wirklich wenig hilfreiche Antwort - sie öffnet unnötigerweise die Tabs-vs-Spaces-Debatte, ohne wirklich nützliche Informationen zu liefern. Dietrich Epp vor 8 Jahren 0
-2
David Mackintosh

Ich glaube nicht, dass es einen Weg gibt. Wenn die Tabulatortaste auf vier Leerzeichen erweitert wird, kann vim nicht mehr wissen, dass es sich um eine Tabulatur handelt.

-1: Mangel an Vorstellungskraft sixtyfootersdude vor 14 Jahren 4