So fügen Sie Einrückungshilfslinien / -linien hinzu

42

In Sublime Text 2 erhalten Sie vertikale Hilfslinien, in denen sich der Einzug wie folgt befindet:

Sublime Text-Screenshot

aber in vim mache ich offensichtlich nicht:

vim screenshot

Gibt es eine Möglichkeit, solche Linien in vim zu zeigen? Übrigens ist meine Einrückung 2 Leerzeichen.

:set tabstop=2 softtabstop=2 shiftwidth=2 expandtab
aharris88
quelle

Antworten:

39

Einheitliche Antwort:

Wenn Sie Tabs verwenden

Ich würde versuchen, Listchars zu verwenden:

:set listchars=tab:\|\ 
:set list

Hinweis: Nach dem letzten \oben steht ein Leerzeichen .

Diese Methode ist gut, da sie die integrierte Unterstützung von Vim verwendet, um solche Dinge zu zeigen.

Beispielausgabe:

|       if (1) {
|       |       func();
|       }

Screenshot des obigen Textbeispiels

Dies funktioniert jedoch nicht für führende Leerzeichen. Wie von @Josh Petrie hervorgehoben, gibt es einen Patch, der für Leerzeichen funktioniert , aber dann müssten Sie Vim neu kompilieren, was über den Rahmen dieser Antwort hinausgeht.

Wenn Sie Leerzeichen verwenden und es Ihnen nichts ausmacht, ein Plugin zu verwenden

Vaibhav Sagar weist darauf hin, dass das Plugin indentLine diese Funktion ausführt.

Installieren Sie es wie gewohnt (siehe Plugins installieren ) und es scheint magisch einfach zu funktionieren ohne weitere Eingaben. Wenn Ihnen die ASCII-Leisten nichts ausmachen, müssen Sie mit Ihren Schriftarten nichts anfangen. Beispielausgabe Ihres Beispiels nach dem Festlegen Ihrer Einrückungseinstellungen und dem Ausführen:IndentLinesReset

45   ¦ var move = function(direction) {
46   ¦ ¦ if(!initialized) { initialize(); }
47 
48   ¦ ¦ if(shiftBoard(direction)) {
49   ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50   ¦ ¦ }
51   ¦ };

Screenshot eines Beispiels mit Leerzeichen

Das Plugin benötigt Vim 7.3 oder höher und nutzt die Conceal-Funktion dieser Version. Anstatt Text tatsächlich auszublenden, wird Text durch Balken in der Ansicht ersetzt, nicht jedoch der eigentliche Puffer. Das Ergebnis ist, dass Sie die Balken sehen, diese jedoch nicht in der Datei gespeichert werden (da es sich tatsächlich um Leerzeichen handelt).

Vorbehalt

Beide Methoden setzen "richtig" eingerückten Code voraus. Sie platzieren die Einrückungslinien nicht auf der Ebene der Einrückung, wenn ein "Block" geöffnet wird (was sublim zu sein scheint), sondern sie platzieren Linien in regelmäßigen Abständen, basierend auf Ihren Einrückungseinstellungen. Außerdem werden nur die Balken in Linien angezeigt, in denen tatsächlich Platz vorhanden ist (weshalb die Linie in der vim-Ausgabe unter der ersten Linie ifkeine Balken enthält und somit eine visuelle Lücke entsteht).

John O'M.
quelle
Eigentlich benutze ich Leerzeichen zum Einrücken anstelle von Tabulatoren. Ich habe meine Frage aktualisiert.
Aharris88
Oh. Na dann, das wird mehr Forschung erfordern.
John O'M.
1
Es gibt einen Patch, mit dem Listchars für nicht nachgestellte Leerzeichen verwendet werden können, die Sie in der Mailingliste nachschlagen können. Es wurde jedoch nicht in die offizielle Verteilung aufgenommen :(
1
Aktualisierte Antwort mit Informationen von Vaibhav Sagar und Josh Petrie. Ich habe das Plugin Vaibhav ausprobiert und die Ergebnisse in der bearbeiteten Antwort angezeigt. Ich glaube, ich werde dieses Plugin jetzt selbst verwenden. Es ist nicht fantastisch, aber im Allgemeinen scheint es ziemlich gut zu funktionieren.
John O'M.
Ist es möglich, dass die Hilfslinien wie in erhabenen Linien in Leerzeilen erscheinen?
James
19

Eine andere Option, die ich verwende, die nicht genau das ist, wonach Sie gefragt haben, die aber den gleichen Zweck erfüllt, um die Anzeige der Informationen in derselben Spalte zu vereinfachen, besteht darin, Folgendes in Ihren Einstellungen festzulegen vimrc:

set cursorcolumn
set cursorline

Cursorsäule Abbildung

Dies hat den Nachteil, dass Sie Ihren Cursor auf die Spalte bewegen müssen, die Sie sehen möchten, aber Sie erhalten weniger visuelle Unordnung. Normalerweise behalte ich meinen Platz mit dem Cursor, wenn ich mich für Einrückungsstufen interessiere. Mein Weg ist auch in Sprachen wie Python ohne geschweifte Klammern nicht so peinlich.

Karl Bielefeldt
quelle
Benutzer von Python vi werden für dieses Feature sterben
shuva
18

Der Vollständigkeit halber gibt es auch das Indent Guides- Plugin, das die Einrückungsstufen durch Abwechseln der Farben von Leerzeichen anzeigt. Es erfordert Version 7.2 oder höher. Da es die Variablen tabstopund verwendet shiftwidth, wird es wahrscheinlich sofort für Ihre Einrückungseinstellungen funktionieren.

Imgur

Sobald das Plugin installiert ist, können Sie einfach :IndentGuidesEnableoder verwenden :IndentGuidesDisable. Wenn Sie Terminal VIM verwenden, beachten Sie, dass gemäß dem Handbuch

Im Moment hat Terminal Vim nur grundlegende Unterstützung. Dies bedeutet, dass Farben nicht automatisch basierend auf Ihrem Farbschema berechnet werden. Stattdessen werden einige voreingestellte Farben verwendet, je nachdem, ob der Hintergrund dunkel oder hell eingestellt ist.

Um die Farben der Anleitungen für den Screenshot zu ändern, habe ich Folgendes verwendet

let g:indent_guides_auto_colors=0

Die Farben werden also nicht neu berechnet, wenn die Puffer ausgetauscht werden. Legen Sie dann die Farben mit fest

hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236

Wie bei den anderen vorgestellten Lösungen werden nur die Einrückungslinien in Zeilen angezeigt, in denen Leerzeichen vorhanden sind.

Guillem
quelle
füge let g:indent_guides_enable_on_vim_startup=1meine .vimrc hinzu, um dies beim Start zu aktivieren.
Inye
9

Ich habe festgestellt, dass das indentLine- Plugin das beste dafür ist. Sie benötigen jedoch eine Schriftart mit den entsprechenden Symbolen. Ich finde, dass Consolas unter Windows und Menlo unter Mac OS X gut funktionieren. Wie oben in der einheitlichen Antwort hervorgehoben, funktioniert dies, indem (ab) die Funktion von vim verwendet wird conceal, um vertikale Balken (von der verwendeten Schriftart) an die richtige Stelle zu setzen. Ich bin ziemlich zufrieden mit dieser Lösung, aber der Nachteil ist, dass meine vertikalen Balken Teil der Box-Zeichen-Glyphen sind und sie wie in anderen Editoren zentriert anstatt linksbündig ausgerichtet sind. Ich habe mich daran gewöhnt, aber es kann durch manuelles Patchen Ihrer Schriftart oder mit einer Schriftart wie Fantasque Sans Mono behoben werden (beachten Sie, wie die Screenshots im verknüpften Github-Repo indentLine verwenden).

Vaibhav Sagar
quelle
4
Bitte werfen Sie einen Blick auf unsere Diskussion der Plug-in-Link-Antworten und überlegen Sie, Ihre Antwort mit weiteren Informationen zu aktualisieren.
Mein Fehler, ich habe meine Antwort aktualisiert.
Vaibhav Sagar
Welcher Buchstabe ist die gepatchte vertikale Linie? Kannst du es hier einfügen? Vielen Dank.
Timtro
2

Das indentLine-Plug-in ist bei nicht kleinen Dateien in der Regel relativ langsam. Dies tritt auf, wenn Sie auf die Eingabetaste klicken, da es etwa eine Sekunde nacheilt.

Ich habe festgestellt, dass vim-indentguides ein schnelleres und optisch ähnliches Plugin ist, das auch Tabulator -Einrückungen von Leerzeichen-Einrückungen unterscheidet.

Jaybay
quelle