Wie kann ich ein echtes Tabulatorzeichen in Vim einfügen?

75

Wenn ich mein vimrc hier habe:

set tabstop=2
set shiftwidth=2
set softtabstop=2
set expandtab
set smarttab

Und ich habe das Supertab-Plugin installiert. Immer wenn ich mich im Einfügemodus befinde, drücke ich die Tabulatortaste, es wird die automatische Vervollständigung angezeigt, aber manchmal möchte ich ein echtes Tabulatorzeichen in ein String-Literal wie einfügen. Was ich damit meine, wenn ich die Tabulatortaste in doppelten Anführungszeichen drücke, sollte ein echtes Tabulatorzeichen eingegeben werden.

Samnang
quelle

Antworten:

133

Während im Einfügemodus oder Befehlsmodus (die :Eingabeaufforderung an der Unterseite des Editors), Typ CTRL+ Vdann TAB.

Die Verwendung von CTRL+ Vsignalisiert Vim, dass das nächste Zeichen wörtlich genommen werden soll. Auch im Einfügemodus.

AKTUALISIEREN:

Wie von Herbert Sitz festgestellt, müssen Sie, wenn sich gVim im Windows-Modus befindet (Standard), CRTL+ Qanstelle von CTRL+ verwenden V.

Jason Down
quelle
2
Das war's, aber unter Windows müssen Sie CTRL+ Qdann tun, wenn die Win-Kompatibilität in vimrc aktiviert ist (dies ist die Standardeinstellung) TAB.
Herbert Sitz
@Herbert Sitz: Guter Punkt. Ich habe den Windows-Modus für gVim vergessen. Ich werde das auch bemerken.
Jason Down
STRG + Q versetzt mich einfach in den visuellen Blockmodus, sodass eine nachfolgende TAB nichts bewirkt. Vermisse ich hier etwas? Stimmt etwas mit meiner Konfiguration vielleicht nicht?
Ben Franklin
@BenFranklin Sie müssen sich im Modus der letzten Zeile (Eingabeaufforderung mit: am unteren Bildschirmrand) oder im Einfügemodus befinden, damit STRG + V (oder Q) das nächste Zeichen wörtlich nimmt. Wenn Sie sich im Standardbefehlsmodus befinden, werden Sie, wie Sie bemerkt haben, in den Blockmodus versetzt.
Jason Down
4

@ Samnang: Ich habe ein ähnliches Setup wie Sie; Leider hat Jasons Antwort für mich nicht funktioniert.

Dies ist eine Problemumgehung:

  • Ersetzen Sie ein Zeichen (z. B. ein Backtick: `) oder ein Zeichen (z. B. eine eindeutige alphanumerische Zeichenfolge: zzz), in dem Sie Ihre Registerkarte (n) haben möchten.
  • Wählen Sie den Text aus (visueller Modus) und führen Sie eine Suche / Ersetzung durch.

    : 's / `/ \ t / g

Aktualisierte Antwort, inspiriert von @ Cyryl1972s Kommentar.

Registerkarte am Anfang aller Zeilen einfügen (Hinweis: Für den folgenden Code müssen keine Zeilen ausgewählt werden, da dieser im Zeilenübereinstimmungsteil des Ausdrucks enthalten ist):

:1,$s/^/\t\1/

Registerkarte nach den ersten 10 Zeichen in allen Zeilen einfügen:

:1,$s/^\(.\{10}\)/\1\t/

Erklärung - erster Teil:

:1,$      Match from line 1 to end of file
^(.{10}   Collect (preserve) all text from beginning of line to position 10
          (you need to escape the parentheses, \( and \), as well the FIRST
          (left) curly brace, only: \{ -- as it, { , appears to have special
          meaning in regex when used for this purpose

Erklärung - zweiter Teil:

/1        Add back the preserved text
\t        Insert a tab

... und der Rest der Zeile wird ebenfalls automatisch wiederhergestellt.

Nur aktuelle Zeile:

:s/^/\t\1/

Beispiel: Fügen Sie die Registerkarte an Position 10 (0-indiziert) in den Zeilen 2-4 ein:

1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 

:2,4s/^\(.\{10}\)/\1\t/

1234567890abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890abcdefghij 

Referenzen (StackOverflow):

Referenzen (andere):

Victoria Stuart
quelle
Die Lösung funktioniert auch
::