Odpowiedzi:
Ujednolicona odpowiedź:
Spróbowałbym użyć listchars:
:set listchars=tab:\|\
:set list
Uwaga: po ostatnim \powyżej jest spacja .
Ta metoda jest dobra, ponieważ wykorzystuje wbudowane wsparcie Vima do pokazywania tego rodzaju rzeczy.
Przykładowe dane wyjściowe:
| if (1) {
| | func();
| }

Nie działa to jednak w przypadku wiodących miejsc. Jak zauważył @Josh Petrie, istnieje łatka do pracy ze spacjami , ale wtedy trzeba będzie ponownie skompilować Vima, co jest poza zakresem tej odpowiedzi.
Vaibhav Sagar wskazuje, że wtyczka indentLine wykonuje tę funkcję.
Zainstaluj w normalny sposób (zobacz instalowanie wtyczek ) i wydaje się, że magicznie po prostu działa bez dalszych danych wejściowych. Jeśli nie masz nic przeciwko paskom ASCII, nie musisz nic robić z czcionkami. Przykładowe dane wyjściowe przykładu po ustawieniu ustawień wcięcia i uruchomieniu:IndentLinesReset
45 ¦ var move = function(direction) {
46 ¦ ¦ if(!initialized) { initialize(); }
47
48 ¦ ¦ if(shiftBoard(direction)) {
49 ¦ ¦ ¦ setTimeout(addRandomPiece, 100);
50 ¦ ¦ }
51 ¦ };

Wtyczka wymaga Vima 7.3 lub nowszego i sprawia, że cleaver używa funkcji ukrywania tej wersji. Zamiast faktycznie ukrywać tekst, zamienia tekst na paski w widoku, ale nie na rzeczywisty bufor. W rezultacie widzisz słupki, ale nie są one zapisywane w pliku (ponieważ w rzeczywistości są spacjami)
Obie te metody zakładają „prawidłowo” wcięty kod. Nie umieszczają linii wcięcia na poziomie wcięcia, gdy otwierany jest „blok” (który wydaje się podniosły), ale zamiast tego umieszczają linie w regularnych odstępach czasu w oparciu o ustawienia wcięcia. Dodatkowo pokazuje tylko słupki na liniach, na których faktycznie jest miejsce (dlatego linia w wyjściu vima pod pierwszym ifnie ma żadnych słupków, tworząc wizualną przerwę)
Inną opcją, której używam, która nie jest dokładnie tym, o co prosiłeś, ale realizuje ten sam cel, ułatwiając zobaczenie, co jest w tej samej kolumnie, jest ustawienie następujących opcji w vimrc:
set cursorcolumn
set cursorline
Ma to tę zaletę, że musisz przesunąć kursor do kolumny, którą chcesz zobaczyć, ale masz mniej wizualnego bałaganu. Zwykle, gdy zależy mi na poziomach wcięcia, i tak utrzymuję swoje miejsce za pomocą kursora. Moja droga też nie jest tak niewygodna w językach takich jak python bez zamykania nawiasów klamrowych.
Dla kompletności dostępna jest również wtyczka Indent Guides , która pokazuje poziomy wcięcia poprzez naprzemienne kolory białych spacji. Wymaga wersji 7.2 lub nowszej. Ponieważ używa zmiennych tabstopi shiftwidth, prawdopodobnie będzie od razu działał dla twoich ustawień wcięć.

Po zainstalowaniu wtyczki możesz po prostu użyć :IndentGuidesEnablelub :IndentGuidesDisable. Jeśli używasz terminalu vim, zwróć uwagę, że zgodnie z instrukcją
W tej chwili Terminal Vim ma tylko podstawowe wsparcie. Oznacza to, że kolory nie będą automatycznie obliczane na podstawie Twojego schematu kolorów. Zamiast tego stosuje się niektóre wstępnie ustawione kolory w zależności od tego, czy tło jest ustawione na ciemne, czy jasne.
Aby zmienić kolory przewodników na zrzucie ekranu, zastosowałem następujące
let g:indent_guides_auto_colors=0
więc kolory nie są ponownie obliczane podczas zamiany buforów, a następnie ustaw kolory za pomocą
hi IndentGuidesEven ctermbg=238
hi IndentGuidesOdd ctermbg=236
Podobnie jak w przypadku innych przedstawionych rozwiązań, pokazuje tylko wcięcia na liniach, w których są spacje.
let g:indent_guides_enable_on_vim_startup=1do mojego .vimrc, aby włączyć to podczas uruchamiania.
Uważam, że wtyczka indentLine jest najlepsza do tego. Potrzebujesz czcionki z odpowiednimi symbolami, uważam, że Consolas w Windows i Menlo w Mac OS X działają dobrze. Jak wskazano w ujednoliconej odpowiedzi powyżej, działa on poprzez (ab) użycie concealfunkcji vima do umieszczenia pionowych pasków (z użytej czcionki) we właściwym miejscu. Jestem całkiem zadowolony z tego rozwiązania, ale jego wadą jest to, że moje pionowe paski są częścią glifów rysujących ramki i są wyśrodkowane, a nie wyrównane do lewej, jak w innych edytorach. Przyzwyczaiłem się do tego, ale można to naprawić, ręcznie łatając czcionkę lub używając czcionki takiej jak Fantasque Sans Mono (zwróć uwagę, jak zrzuty ekranu w połączonym repozytorium github używają indentLine).
Wtyczka indentLine działa dość wolno na niemałych plikach, co można zaobserwować po kliknięciu Enter, ponieważ opóźnia się o sekundę.
Odkryłem, że vim-indentguides jest szybszą i podobną wizualnie wtyczką, która również wizualnie odróżnia wcięcia tabulatorów od wcięć spacji.