Jak zmienić rozmiar zakładki w Vimie?

172

Za każdym razem, gdy dodaję selektor w CSS i naciskam, Enteraby zdefiniować właściwości, kończy się to w ten sposób:

#selector {
        property: value;
}

(Zakładki z 8 spacjami)

Jak mogę skonfigurować Vima, aby wyglądało tak:

#selector {
    property: value;
}

(Tabulatory z 4 spacjami)

alexchenco
źródło
4
Czy potrzebujesz jednej zakładki o szerokości 4 spacji? Cztery spacje? Lub cztery zakładki o szerokości 1 spacji? To różne rzeczy i nie jesteś jasny. W każdym razie zacznij od czytania: he ts,: he sw, and: he expandt
abeyer

Odpowiedzi:

102

Rozszerzając odpowiedź Zoula:

Jeśli chcesz ustawić Vima, aby używał określonych ustawień podczas edycji określonego typu pliku, będziesz chciał użyć autokomend:

autocmd Filetype css setlocal tabstop=4

Dzięki temu zakładki będą wyświetlane jako 4 spacje. Ustawienie expandtabspowoduje, że Vim faktycznie wstawi spacje (ich liczbę kontrolowaną tabstop) po naciśnięciu tabulatora; możesz chcieć użyć, softtabstopaby backspace działał poprawnie (to znaczy zmniejszyć wcięcia, gdy tak by się stało, gdyby używane były tabulatory, zamiast zawsze usuwać jeden znak na raz).

Aby w pełni świadomą decyzję, w jaki sposób ustawić rzeczy, trzeba czytać dokumenty Vima na tabstop, shiftwidth, softtabstopi expandtab. Najciekawszy fragment znajduje się pod expandtab( :help 'expandtab):

Istnieją cztery główne sposoby używania zakładek w Vimie:

  1. Zawsze trzymaj „tabstop” na 8, ustaw „softtabstop” i „shiftwidth” na 4 (lub 3 lub cokolwiek wolisz) i używaj „noexpandtab”. Wtedy Vim użyje kombinacji tabulatorów i spacji, ale pisanie i będzie zachowywać się tak, jakby tabulacja pojawiała się co 4 (lub 3) znaki.

  2. Ustaw „tabstop” i „shiftwidth” na dowolne i użyj „expandtab”. W ten sposób zawsze będziesz wstawiać spacje. Formatowanie nigdy nie zostanie zepsute po zmianie 'tabstop'.

  3. Ustaw 'tabstop' i 'shiftwidth' na cokolwiek wolisz i użyj | modeliny | aby ustawić te wartości podczas ponownej edycji pliku. Działa tylko wtedy, gdy używasz Vima do edycji pliku.

  4. Zawsze ustawiaj „tabstop” i „shiftwidth” na tę samą wartość oraz „noexpandtab”. Powinno to wtedy zadziałać (tylko dla początkowych wcięć) dla dowolnego ustawienia tabulacji używanego przez ludzi. Dobrze byłoby mieć tabulatory po pierwszym niepustym miejscu wstawione jako spacje, jeśli to zrobisz. W przeciwnym razie wyrównane komentarze będą nieprawidłowe po zmianie tabulatora.

Michał Marczyk
źródło
Nie martw się też zbytnio o ewentualną zmianę zdania później ... zobacz :help retab(sprawdź wariant!).
Michał Marczyk
Czy użycie autocmd jest komplementarne z używaniem .vimrc, czy może alternatywą?
Josh Desmond
224
:set tabstop=4
:set shiftwidth=4
:set expandtab

Spowoduje to wstawienie czterech spacji zamiast znaku tabulacji. Spacje są nieco bardziej „stabilne”, co oznacza, że ​​tekst z wcięciem spacjami będzie wyświetlany tak samo w przeglądarce i każdej innej aplikacji.

zoul
źródło
83
Tak, ale tabulatory są semantyczne (każda zakładka oznacza 1 warstwę wcięcia), a spacje są czysto prezentacyjne. Innymi słowy, używanie tabulatorów pozwoli innym osobom przeglądającym Twój kod wyświetlać tak szerokie, jak im odpowiada, podczas gdy spacje na to nie pozwalają.
K Prime
11
Zauważ, że jeśli wolisz, aby '>' i '<' przesuwały twój tekst na tę samą odległość co klawisz tabulacji , możesz po prostu :set shiftwidth=0w swoim vimrc i zapomnieć o tym na zawsze, ponieważ mówi to vimowi, że zawsze chcesz, aby pasował tabstop.
RzadkoNeedy
132

Aby dokonać zmiany dla jednej sesji, użyj tego polecenia:

:set tabstop=4

Aby zmiana była trwała, dodaj ją do ~/.vimrclub ~/.vim/vimrc:

set tabstop=4

Wpłynie to na wszystkie pliki, nie tylko na css. Aby wpłynąć tylko na pliki CSS:

autocmd Filetype css setlocal tabstop=4

jak stwierdził Michał w odpowiedzi .

Keith
źródło
2
jeśli chcesz, aby tabulator działał jak cztery spacje, konieczne jest dodanie pozostałych linii w odpowiedzi @Zoul do pliku .vimrc; to znaczy, dodaj „set shiftwidth = 4” i „set expandtab” również do pliku .vimrc.
qartal
7
Pytanie brzmi: „Jak zmienić rozmiar zakładki w Vimie?”
Keith
Tak bym to zrobił. Aby mieć pewność ~/.vimrc, że kopia zapasowa jest zawsze tworzona, zazwyczaj zapisuję plik w folderze Dropbox, a następnie tworzę łącze symboliczne do pulpitu:ln -s /home/myfolder/Dropbox/.vimrc ~
enchance
41

Kilka odpowiedzi na tej stronie to „jednorazowe” poprawki opisanego problemu. Oznacza to, że następnym razem, gdy otworzysz dokument w vimie, powrócą poprzednie ustawienia zakładki.

Jeśli ktoś jest zainteresowany trwałą zmianą ustawień zakładki:

Alexander McNulty
źródło
11
Spowoduje to wstawienie spacji, a nie tabulatorów.
Supernova
5
@Supernova, możesz usunąć "expandtab", aby uzyskać zakładki
kommradHomer
27

Jako jedna linijka do Vima :

:set tabstop=4 shiftwidth=4 expandtab

Aby uzyskać stałą konfigurację , dodaj te linie do ~ / .vimrc :

set tabstop=4
set shiftwidth=4
set expandtab
oz19
źródło
6

AKTUALIZACJA

Jeśli pracujesz nad konkretnym projektem, bardzo polecam użycie editorconfig .

Pozwala zdefiniować .editorconfigplik w katalogu głównym repozytorium, definiując wcięcie, którego chcesz użyć dla każdego typu pliku w całym repozytorium.

Na przykład:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

Istnieje wtyczka vim, która automatycznie konfiguruje vim zgodnie z plikiem konfiguracyjnym dla pliku, który otwierasz.

Ponadto .editorconfigplik jest automatycznie obsługiwany w wielu innych IDE i edytorach, więc jest to najlepsza opcja do współpracy między użytkownikami w różnych środowiskach.

ORYGINALNA ODPOWIEDŹ

Jeśli potrzebujesz często zmieniać rozmiary i nie chcesz wiązać tego z określonym typem pliku, możesz mieć predefiniowane polecenia w swoim pliku .vimrc, aby szybko zmieniać preferencje:

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

To odwzorowuje dwa różne zestawy rozmiarów na klucze \ t i \ m. Możesz ponownie przypisać to do dowolnych kluczy.

Jens
źródło