it-swarm.com.de

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

Wenn ich meine Vimrc hier habe:

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

Und ich habe Supertab-Plugin installiert. Wenn ich im Einfügemodus die Tabulatortaste drücke, wird die automatische Vervollständigung angezeigt. Manchmal möchte ich jedoch ein echtes Tabulatorzeichen in ein Zeichenfolgenliteral einfügen. Was ich damit meine, wenn ich die Tabulatortaste in doppelten Anführungszeichen-Stringliteralen drücke, sollte ein reales Tabulatorzeichen eingegeben werden.

50
Samnang

Geben Sie im Einfüge- oder Befehlsmodus (der Eingabeaufforderung : am unteren Rand des Editors) Folgendes ein CTRL + V dann TAB.

Verwenden CTRL + V signalisiert Vim, dass es das nächste Zeichen wörtlich nehmen soll. Auch im Einfügemodus.

AKTUALISIEREN:

Wenn sich gVim im Windows-Modus befindet (Standardeinstellung), müssen Sie wie von Herbert Sitz angegeben verwenden CRTL + Q anstelle von CTRL + V.

96
Jason Down

@ 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 Zeichen (z. B. eine eindeutige alphanumerische Zeichenfolge: zzz), wo Sie Ihre Tab (s) wünschen.
  • Wählen Sie den Text aus (visueller Modus) und führen Sie eine Suche/Ersetzung durch.

    : 's/`/\t/g

Antwort aktualisiert, inspiriert von @ Cyryl1972s Kommentar.

Einfügen eines Tabulators am Anfang aller Zeilen (Beachten Sie auch: Es ist nicht erforderlich, Zeilen für den folgenden Code auszuwählen, da dies im Zeilenanpassungsbereich des Ausdrucks enthalten ist):

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

Inert-Tab nach den ersten 10 Zeichen in allen Zeilen:

: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 Leitung wird ebenfalls automatisch wiederhergestellt.

Aktuelle Zeile nur:

:s/^/\t\1/

Beispiel: Einfügen eines Tabulators an Position 10 (0-indexiert) in den Zeilen 2-4:

1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 

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

1234567890abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890abcdefghij 

Referenzen (StackOverflow):

Referenzen (andere):

0
Victoria Stuart