Mit einem Tastendruck die mit Leerzeichen erweiterte Registerkarte in Vim löschen?


19

Ich bearbeite Python- Code mit Vim.

Mit der tabTaste werden vier Leerzeichen zum Einrücken eingefügt. Wie kann ich diese Leerzeichen mit einem "Backspace" (?) Strich löschen - anstatt mit vier?

Dafür muss es eine "Set" -Option geben ...

Hier ist meine .vimrc:

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

Antworten:


23

Mit können Sie Ctrl+Deinen Tabulator sichern. Dadurch wird die gesamte Zeile um einen Tabulator nach links verschoben. Ctrl+Ttut das Gleiche auf der rechten Seite. Beachten Sie, dass diese Tastenanschläge nur im Einfügemodus funktionieren (verwenden Sie <<und >>für das Äquivalent im Befehlsmodus).


30
set softtabstop=4

10
IMO, genau darum hat das OP gebeten. Verdient mehr Upvotes.
Ludwig Weinzierl

2
Das ist die richtige Antwort.
mk12

1
Wusste nicht, und das war genau das, wonach ich suchte. +1
NigoroJr

5

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 Ärger erspart, wenn Sie häufig das Tabbing ändern. Das Setzen von shiftwidth( sw) auf 0sollte dies auch effektiv bewirken tabstop.

Im Detail

shiftwidth sw

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

tabstop ts

Anzahl der Leerzeichen, die ein in der Datei zählt. Siehe auch : Befehl retab und softtabstopOption.

softtabstop sts

Anzahl der Leerzeichen, die Tabbeim Ausführen von Bearbeitungsvorgängen wie dem Einfügen von Taboder Verwenden von berücksichtigt werden 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 den tabsStandardwert für is beizubehalten, während Sie die Einstellung bearbeiten können sts. Wenn stsnegativ, wird der Wert von shiftwidthverwendet. Dies erspart Ihnen Ärger, wenn Sie die Tabstopps häufig ändern. Wenn expandtabnicht festgelegt, 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 Ctrl-, um eine echte Registerkarte einzufügen, wenn sie aktiviert ist V Tab. Siehe auch : retab


Ordentlich, ich benutze vim seit Jahren, aber die Vererbung von sts / sw / ts ist mir nie aufgefallen.
timss

2

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


1

Mehrere Möglichkeiten:

  1. Sie können alle Whitespaces "nachbearbeiten", damit sie durch Tabulatoren ersetzt werden. Auf diese Weise können sie leicht gelöscht werden.
  2. Sie könnten (das ist nicht getestet, also schlage ich hier nur Ideen vor) eine Funktion erstellen, die im normalen Modus das Vierfache der Rücktaste ausführt. Dann ordne es etwas zu. Es kann jedoch nicht festgestellt werden, ob Leerzeichen oder wichtige Zeichen gelöscht werden. Dies ist daher möglicherweise unsicher.
  3. '4X' löscht die letzten 4 Zeichen (das ist ein großes X, nicht ein kleines, das wirkt wie die Entf-Taste).

0

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


Hallo und willkommen beim Superuser. Obwohl ich mit Ihrer Antwort einverstanden bin, bin ich selbst ein vi-Benutzer. Ihre Antwort ist kurz, erklärt nicht, warum Sie vorschlagen, was Sie vorschlagen, und warum Sie nicht etwas vorschlagen, das zu der gestellten Frage passt.
Mogget

-1

Haben Sie die Einstellung zum Erweitern von Registerkarten in Ihrem VIM überprüft ?

:set noet

Normalerweise ziehe ich es vor, die Register zu behalten, während ich an den Dateien arbeite.
Wenn es erforderlich ist, ersetze ich die Tabs durch 4 Leerzeichen oder so viele wie erforderlich.

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

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


oh, ich habe es getan, weil ich Tabs erweitern muss - ich denke - weil Code, den ich bearbeite, ursprünglich so geschrieben wurde. jetzt folge ich einfach dieser Konvention.
Evgeny

Sie könnten immer noch tun, was ich sage, und Leerzeichen am Ende wiederherstellen (wenn Sie die Datei zurück in das Repository geben müssen)
Nik

Vielleicht könnten Sie eine vim-Funktion haben, die sie zu Tabulatoren beim Öffnen erweitert und beim Schließen zu Leerzeichen reduziert hat? Hat jemand irgendwelche Ideen?
Sixtyfootersdude

Dies ist eine wirklich wenig hilfreiche Antwort - sie öffnet die Tabs-vs-Spaces-Debatte unnötigerweise erneut, ohne dass tatsächlich nützliche Informationen bereitgestellt werden.
Dietrich Epp

-2

Ich glaube nicht, dass es einen Weg gibt. Sobald die Tabulatortaste auf vier Leerzeichen erweitert wurde, kann vim nicht mehr erkennen, dass es sich jemals um einen Tabulator handelt.


4
-1: Mangel an Vorstellungskraft.
Sixtyfootersdude
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.