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 if
nie 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 tabstop
i shiftwidth
, prawdopodobnie będzie od razu działał dla twoich ustawień wcięć.
Po zainstalowaniu wtyczki możesz po prostu użyć :IndentGuidesEnable
lub :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=1
do 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 conceal
funkcji 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.