Ujednolicona odpowiedź:
Jeśli używasz kart
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.
Jeśli używasz spacji i nie masz nic przeciwko użyciu wtyczki
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)
Zastrzeżenie
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
: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.
źródło
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
ishiftwidth
, 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ąAby zmienić kolory przewodników na zrzucie ekranu, zastosowałem następujące
więc kolory nie są ponownie obliczane podczas zamiany buforów, a następnie ustaw kolory za pomocą
Podobnie jak w przypadku innych przedstawionych rozwiązań, pokazuje tylko wcięcia na liniach, w których są spacje.
źródło
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).źródło
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.
źródło