Vim jest bardzo przychylny, jeśli chodzi o kartę Vs. preferencje przestrzenne. Jak rozumiem, tabstop
ustawienie wskazuje szerokość znaku tabulacji. To shiftwidth
ustawienie określa, ile kolumn należy zwiększyć / zmniejszyć podczas używania poleceń <<i >>, podczas gdy softtabstop
ustawienie wpływa na ilość białych znaków, które mają być wstawione po naciśnięciu Tabklawisza w trybie wstawiania. Jeśli expandtab
jest włączona, klawisz tabulacji wstawia softtabstop
liczbę znaków spacji. Podczas gdy przy expandtab
wyłączonym naciśnięciu Tabklawisza wstawia się najmniejszą możliwą liczbę pasujących znaków tabulacji + spacji softtabstop
. (Proszę popraw mnie jeżeli się mylę.)
Ten ostatni punkt sprawia, że zastanawiam się: czy istnieje praktyczny przypadek, w którym byś nie chciał shiftwidth == tabstop && tabstop == softtabstop
? Nie mogę wymyślić żadnego. Jeśli o mnie chodzi, najwygodniej byłoby ustawić wszystkie 3 z nich na tę samą wartość w jednym przypisaniu. np. dzwoniąc:
:set stab=4
co byłoby równoznaczne z uruchomieniem:
:set tabstop=4 softtabstop=4 shiftwidth=4
Czy ktoś może zasugerować, jak można to zrobić?
AKTUALIZACJA
Dzięki za odpowiedzi tak daleko od zbytniego php , Hobbs i kaiser.se . Zamiast odpowiadać każdemu indywidualnie, aktualizuję tutaj pytanie.
Softtabstop z wyłączoną kartą expandtab
Powiedziałem powyżej, że przy wyłączonej karcie expandtab, naciśnięcie klawisza Tab wstawia najmniejszą możliwą liczbę pasujących znaków tabulacji + spacji softtabstop
. Trzymam się tego, ale myślę, że muszę wyjaśnić, co miałem na myśli. Spróbuję to zrobić na kilku przykładach. Aby kontynuować, biegnij :set list
, aby zobaczyć znaki tabulacji.
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
W trybie wstawiania naciśnięcie klawisza tabulacji powoduje wstawienie 2 znaków spacji. Naciśnij klawisz tabulatora po raz drugi i zamiast wstawiać dwa dodatkowe znaki spacji (łącznie 4 znaki spacji), zastępuje poprzednie 2 spacje pojedynczym znakiem tabulacji. Tabstop jest ustawiony na 4, więc pojedynczy znak tabulacji ma taką samą szerokość jak 4 spacje.
tabstop=4 softtabstop=6 shiftwidth=4 noexpandtab
W trybie wstawiania naciśnięcie klawisza tabulatora powoduje wstawienie 1 znaku tabulacji plus 2 spacje. Znak tabulatora ma szerokość 4, więc całkowita szerokość wynosi 6, a uzyskuje się to za pomocą 3 znaków. Naciśnięcie klawisza tabulatora po raz drugi wstawia dwa znaki tabulacji i usuwa dwie spacje, które zostały wcześniej wstawione. Całkowita szerokość wynosi 12 i można to osiągnąć za pomocą 3 znaków.
W obu tych przykładach Vim wstawia minimalną możliwą liczbę znaków tabulacji + spacji, które pasują do softtabstop.
Jeśli pracuję z wyłączoną kartą expandtab, nie wyobrażam sobie, że chcę dodatkowej kontroli szczegółowości, którą można osiągnąć, ustawiając softtabstop na inną wartość niż tabstop. Byłoby jeszcze być użyteczne dla mnie, aby móc ustawić tabstop
, softtabstop
i shiftwidth
na tę samą wartość za pomocą jednego polecenia.
Czy expandtab sprawia, że softtabstop jest zbędna?
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
W trybie wstawiania naciśnięcie klawisza tabulatora powoduje wstawienie 4 spacji. Naciśnięcie klawisza Delete usuwa pojedynczą spację - więc musisz cofnąć się 4 razy, jeśli przypadkowo naciśniesz klawisz Tab.
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
W trybie wstawiania naciśnięcie klawisza tabulatora powoduje wstawienie 4 spacji. Naciśnięcie klawisza Backspace usuwa 4 spacje.
Jeśli pracuję z expandtab
włączonym, wolałbym, aby klawisz delete usuwał taką samą ilość białych znaków, jak wstawiane klawisze tabulacji. Więc w tym przypadku, też czuję, że dobrze byłoby, aby móc przypisać tę samą wartość tabstop
, softtabstop
a shiftwidth
równocześnie.
Skrót byłby nadal przydatny
To wspaniałe, że Vim zapewnia tak dużą elastyczność, ale nie widzę, żebym tego potrzebował. Chcę tylko mieć możliwość wyboru szerokości tabulatora i tego, czy jest to tabulator „twardy” (przy użyciu znaku tabulacji), czy „miękki” (składający się ze spacji). Przełączanie między twardymi i miękkimi zakładkami jest dość łatwe (:set expandtab!
), ale chciałbym, aby ustawienie szerokości karty było prostsze, bez konieczności majstrowania przy 3 różnych parametrach.
Tak więc moja propozycja czegoś takiego :set stab=4
nadal brzmi dla mnie dobrze.