Tabulatoren als Zeichen anzeigen


119

Wenn ich in Python an Dateien arbeite, verwechsle ich manchmal Tabulatoren mit Leerzeichen und umgekehrt. Gibt es eine Möglichkeit, Vim dazu zu bringen, ein Zeichen für einen Tab anstelle eines Tabs anzuzeigen?


Nur als Randnotiz können Sie konfigurieren, dass alle Registerkarten bei retabjedem Speichern der Datei in Leerzeichen konvertiert werden.
0xc0de

Wenn Sie vim-faq installiert haben , können Sie dort eine Offline-Antwort erhalten: :h vim-faqund suchen /invisible. Das schwer zu merkende Tag ist :h faq-19.8.
Hotschke

Antworten:


119

Ja, benutze Listchars:

set list
set listchars=tab:>-

Wenn Sie diese beiden Zeilen in Ihre .vimrc einfügen, werden Registerkarten >für die Startposition und -den Rest der Registerkarte angezeigt .

(Anmerkung: Listchars können auch nachgestellte Leerzeichen mit trail:x(durch xdas Zeichen ersetzen, das Sie für ein nachgestelltes Leerzeichen verwenden möchten) anzeigen, was ebenfalls nützlich sein kann.)


6
Hinweis: Ich benutze es gerne set listchars=tab:!·,trail:·, IMHO ·ist viel klarer als ein -... Sie benötigen eine relativ aktuelle Vim-Version, damit dies auch funktioniert (ich weiß nicht genau, welche, ich denke 7.3.x) ...
Martin Tournoij

8
Ich benutze gerne das Unicode-Zeichen, da es etwas kleiner ist als >. Gegenwärtig sehe ich einen nachgestellten Leerraum, indem ich das EOL anzeichne (obwohl ich das oben beschriebene versuchen kann). Meine Einstellungen sind: set listchars=eol:¬,tab:▸\ und
Martin York

58

Die grundlegende Antwort lautet :set list, wodurch Registerkarten als angezeigt werden ^I.

Ich empfehle jedoch, darüber hinauszugehen. Nur :set listist insofern problematisch, als es nicht möglich ist, die visuelle Ausrichtung auf dem Bildschirm beizubehalten. Zum Beispiel:

%.o: %.cpp
^Ig++ -c $<

sieht nicht gut aus, besonders wenn Sie erwarten, dass das gvon g++unter dem ersten pvon cpp(vorausgesetzt tabstop=8) erscheint.

Deshalb schlage ich vor , dass in der .vimrcSie so etwas wie setzen :set listchars=tab:␉· (klar sein, das ist Unicode - Zeichen U + 2409 SYMBOL FÜR Horizontaltabulator gefolgt von U + 00B7 MIDDLE DOT ) .

Wie in erläutert :help listchars, wird bei einer Einstellung mit zwei Zeichen für tab:xydie visuelle Ausrichtung Folgendes beibehalten:

tab:xy        Two characters to be used to show a tab.  The first
              char is used once.  The second char is repeated to
              fill the space that the tab normally occupies.
              "tab:>-" will show a tab that takes four spaces as
              ">---".  When omitted, a tab is show as ^I.

Das obige Beispiel würde auf dem Bildschirm wie folgt aussehen:

%.o: %.cpp
␉·······g++ -c $<

Persönlich mache ich alles mit meinem listchars:

:set listchars=eol:⏎,tab:␉·,trail:␠,nbsp:⎵

Diese Zeichen sind so eindeutig, dass sie im Dokumenttext nur selten wörtlich vorkommen.

Um diese Sonderzeichen in Ihrer Art vimrc, Typ , Ctrl-vu23CEwährend im Insert - Modus, wie in erläutert :help utf-8-typing.


2
Siehe auchset lcs=tab:├─
sch

das gab mir nur ein? um eol
WendyG

14

Registerkarten markieren

Temporäre TabHervorhebung

Für den gelegentlichen Gebrauch können Sie einfach alle Registerkarten in einem Dokument mit dem folgenden Suchbefehl markieren /:

/\t

Um die Hervorhebung zu entfernen, geben Sie einfach :nohdie :nohlsearchAbkürzung für „ Keine Beleuchtung“ ein.

Permanente TabHervorhebung

" Highlight tabs as errors.
" https://vi.stackexchange.com/a/9353/3168
match Error /\t/

Tab hervorheben in vim

Mehr Hervorhebung

Weitere nützliche Hervorhebungsbefehle - einschließlich der Kombination mit nachgestellten Leerzeichen und deren Permanenz - finden Sie im Vim-Wiki .


4
Sie können auch verwenden :match Error /\t/, um Registerkarten (oder ein beliebiges anderes Muster) unabhängig vom Suchregister und von hlsearch :matchzu markieren (geben Sie ein , um es zu löschen).
Martin Tournoij

1
@Carpetsmoker kann man eine ganze Menge mehr diese nützlichen Hervorhebung Befehle (mit nachfolgenden Leerzeichen einschließlich kombiniert!) Findet auf der Vim Wiki über unerwünschte Räume hervorheben .
Serge Stroobandt

9

Ich persönlich mag die Verwendung des Plugins indentLine , das eine vertikale Linie in Einzugsebenen anzeigt.

Dies ist besonders in Python von großer Hilfe, wo die Einrückung wichtig ist.

(Bild von dem Link oben genommen)

Unter anderem wird ein Umschaltbefehl bereitgestellt, der einer Tastenkombination zugeordnet werden kann, sodass Sie ihn deaktivieren können, wenn Sie ihn nicht benötigen.


2
Ich glaube, dieses Plugin ist für das Einrücken von Leerzeichen gedacht.
Jake Byman

5

Möglicherweise möchten Sie Registerkarten in einem normalen Terminal und in gvim anders anzeigen.

set list!
if has('gui_running')
    set listchars=tab:▶\ ,trail:·,extends:\#,nbsp:.
else
    set listchars=tab:>.,trail:.,extends:\#,nbsp:.
endif

(Der Vollständigkeit halber hinzufügen, falls andere es nützlich finden).


4

Am einfachsten ist es, wenn :set listTabulatoren als ^Iund Zeilenende als angezeigt werden $.

Ich verwende gerne ein Mapping, das aufruft

:set invlist 

um zwischen normaler Anzeige und Listenanzeige umzuschalten.

Zum Beispiel:

:nmap <leader>l :set invlist<cr>

Auf diese Weise kann ich schnell überprüfen, ob Probleme mit dem Tabulator oder dem Speicherplatz vorliegen, und dann zu einer regulären Anzeige zurückkehren.

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.