it-swarm.com.de

Ist es möglich, Einrückungshilfslinien in Vim anzuzeigen?

Ich bin ein langjähriger Vim-Benutzer (3 oder 4 Jahre), der kürzlich mit tief verschachteltem Code zu tun hat. Dieser Code wird mit Leerzeichen eingerückt, nicht mit Registerkarten. Ich möchte ein paar saubere und nicht ablenkende Hinweise auf die Einrückung, um zu helfen, den Codeblock aufzuspüren, in dem ich mich befinde, wenn ich auf viele Ebenen schaue. 

:set list 

Zeigt nur Tabulator- und Endzeilen an. Ich habe ein Plug-In gefunden (das im Moment nicht imstande ist, es aufzuspähen), das jede Einrückungsebene in zunehmend dunkleren Farben hervorhebt, dies ist jedoch optisch unansehnlich. Idealerweise würde ich gerne dünne vertikale Linien auf jeder Eindruckebene sehen. Viele neu entwickelte Editoren verfügen über diese Funktionalität, aber ich möchte Vim noch nicht aufgeben.

Weiß jemand, wie das erreicht werden kann?

45
mjn12

HINWEIS: Diese Antwort ist für die Party etwas spät und auch ein schamloser Plug :)

Versuchen Sie trotzdem mein Indent-Guides.vim plugin. Es wurde erstellt, um meinen eigenen Kratzer wegen des Mangels an Einrückungslinien in vim zu kratzen. Ich habe es satt, darauf zu warten, dass jemand anderes mitkommt und es baut, also habe ich es einfach selbst gemacht. 

Eigenschaften:

  • Kann sowohl Tabulator- als auch Leerzeichenstile erkennen.
  • Überprüft automatisch Ihr Farbschema und wählt die entsprechenden Farben aus (nur gVim).
  • Markiert die Einrückungsebenen mit abwechselnden Farben.
  • Volle Unterstützung für gVim und grundlegende Unterstützung für Terminal Vim.
  • Scheint unter Windows gVim 7.3 zu funktionieren (hat jedoch keine umfangreichen Tests durchgeführt).
  • Anpassbare Größe für Einrückungshilfen, z. dünne Führungen (nur Soft-Tabs).
  • Anpassbare Starteinzugsebene.

Hier sind ein paar Screenshots des Plugins in Aktion: setzen Sie Ihre Maus hier und klicken Sie auf .

66
Nate K

Wenn Sie Code mit Leerzeichen einrücken, können Sie my plugin: https://github.com/Yggdroot/indentLine versuchen. Es werden dünne vertikale Linien angezeigt, jedoch keine dicken vertikalen Linien, wie in den obigen Antworten erwähnt. Wenn Sie Code mit Tab einrücken, brauchen Sie nur :set list lcs=tab:\|\ (here is a space)

27
Yggdroot

sie können Registerkarten verwenden, um Einrückungshilfslinien anzuzeigen und Registerkarten zu entfernen, bevor Sie die Datei speichern:

" use 4 spaces for tabs
set tabstop=4 softtabstop=4 shiftwidth=4

" display indentation guides
set list listchars=tab:❘-,trail:·,extends:»,precedes:«,nbsp:×

" convert spaces to tabs when reading file
autocmd! bufreadpost * set noexpandtab | retab! 4

" convert tabs to spaces before writing file
autocmd! bufwritepre * set expandtab | retab! 4

" convert spaces to tabs after writing file (to show guides again)
autocmd! bufwritepost * set noexpandtab | retab! 4
26

Daraufhin werden Punkte angezeigt, um Ihre Einrückungsebene während der Eingabe anzuzeigen. Die Punkte verschwinden auf magische Weise, wenn Sie die Linie verlassen. 

set list listchars=tab:»-,trail:·,extends:»,precedes:«

Z.B:

def test():
....print('indentation level 1')

Ziemlich cool, nicht wahr?

Die effektivste Lösung wäre wahrscheinlich, "Einrückungshilfslinien " Mithilfe von Übereinstimmungshervorhebung "zu zeichnen". Um zu verstehen, wie es hilft, schauen Sie sich dieses Beispiel an:

:match Search /\%(\_^\s*\)\@<=\%(\%1v\|\%5v\|\%9v\)\s/

Es hebt (mit der Suchhervorhebungsgruppe kann natürlich jeder andere Verwendet werden) die erste, die fünfte, die neunte (und es kann fortgesetzt werden) Die virtuelle Spalte, die mit einem Leerzeichen vor nichts außer Whitespace belegt ist der Zeilenanfang. Auf diese Weise wird die Hervorhebung von vier Abschnitten für die Vertiefung Für drei tiefe Ebenen erzeugt.

Um diese Idee zu verallgemeinern, bleibt es nur, ein Muster wie das oben erwähnte .__ zu erzeugen, das der aktuellen Variable textwidth und shiftwidth Entspricht (um tiefere Einrückungsebenen und die richtige Einrückungsbreite zu behandeln). Diese Aufgabe könnte einfach automatisiert werden, wie in der folgenden Funktion gezeigt.

function! ToggleIndentGuides()
    if exists('b:indent_guides')
        call matchdelete(b:indent_guides)
        unlet b:indent_guides
    else
        let pos = range(1, &l:textwidth, &l:shiftwidth)
        call map(pos, '"\\%" . v:val . "v"')
        let pat = '\%(\_^\s*\)\@<=\%(' . join(pos, '\|') . '\)\s'
        let b:indent_guides = matchadd('CursorLine', pat)
    endif
endfunction

Jedes Mal, wenn Sie Einrückungshilfslinien in einem Puffer benötigen, können Sie diese mit :call ToggleIndentGuides() einschalten. Natürlich können Sie die Hervorhebungsgruppe Ändern (oder eine spezielle Gruppe erstellen, die nur in Einrückungshandbüchern verwendet wird) und ein praktisches -Mapping einrichten1 dazu und/oder rufen Sie es für einige Dateitypen von autocmd auf.


1 Einrückungshilfen zur Hervorhebung der Konfiguration aus meinem .vimrc File: https://Gist.github.com/734422

15
ib.

Probieren Sie dieses VIM -Plugin BlockHL .__ aus. Die Einrückung der nachfolgenden Ebenen wird farblich gekennzeichnet.

EDIT: Welche Lanaguge verwenden Sie? Dieses Plugin ist für Sprachen im C-Stil.

1
prestomation

verwenden Sie das Indent-Guides.vim-Plugin und schalten Sie bei Bedarf ig um. Manchmal kann es aber nervig sein :)

0
kevin