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.
źródło
is there a practical case where you wouldn't want shiftwidth == tabstop && tabstop == softtabstop?
, własny kod źródłowy Vima używaset shiftwidth=4 tabstop=8 noexpandtab
. Tak, zazwyczaj chce sięshiftwidth == softtabstop
, ale to niezależne od wartościtabstop
.Odpowiedzi:
Tworzenie
stab
opcji w samym Vimie nie byłoby łatwe, ale przygotowałem to polecenie / funkcję, które możesz upuścić w swoim.vimrc
(lub pliku wtyczki, jeśli jesteś super zorganizowany). Użyj,:Stab
a zostaniesz zapytany o poziom wcięcia i czy chcesz użyćexpandtab
. Jeśli naciśniesz Enter bez nadawania mu nowego poziomu wcięcia, po prostu wydrukuje bieżące ustawienia.źródło
To moja pierwsza próba napisania VimScript, ale oto:
Jeśli umieszczę to w swoim pliku .vimrc, mogę to wywołać, uruchamiając
:call Stab(X)
, gdzie X jest żądaną szerokością karty. To na razie adekwatne rozwiązanie, ale jeśli ktoś może zasugerować sposób na ułatwienie rozmowy, byłbym wdzięczny.Stworzyłem także funkcję, która szybko podsumowuje aktualne ustawienia, które zmapowałem na ctrl-Tab:
Cóż, postawiłem 100 punktów bounty za tę odpowiedź, a teraz w połowie rozwiązałem to sam. Nie jestem pewien, czy mogę zaakceptować własną odpowiedź ...
źródło
W trybie edycji można również użyć Ctrl-Tdo Ctrl-Dwcinania i usuwania wcięć do następnego poziomu wcięcia, zgodnie z ustawieniami
shiftwidth
, niezależnie od ustawieńtabstop
,softtabstop
lubexpandtab
. Vim automatycznie doda / usunie spacje lub tabulatory, aby przenieść cię do prawej kolumny.Jeśli używasz tych poleceń do kontrolowania wcięć zamiast Tab/ Backspace, nie musisz się martwić, że wszystkie te ustawienia zakładek pasują do siebie i zawsze uzyskujesz właściwy poziom wcięcia.
źródło
Jeśli
expandtab
jest ustawione (jak wskazuje zbyt wiele php),softtabstop
staje się zbędne. Jedynym powodem, dla którego mógłbyś ustawićshiftwidth
inaczej,tabstop
byłoby zaspokojenie dziwnego nawyku; na przykład używasz wcięć czterech spacji, ale wolisz tabwstawić osiem spacji.Jeśli nie
expandtab
jest ustawiony, sprawy stają się bardziej niejasne. Jeśli chcesz, aby Twój kod wyglądał tak samo wcat
edytorach zi non-vim, jak w vimie, totabstop
zawsze powinien być ustawiony na 8; w tym przypadku należy ustawićsofttabstop
ishiftwidth
oba na preferowany poziom wcięcia. Jeśli zamiast tego wolisz, aby każda „fizyczna zakładka” w pliku reprezentowała jeden poziom wcięcia, możesz ustawićtabstop
ishiftwidth
na preferowany poziom wcięcia i pozostawićsofttabstop
zero (ustawienie równej wartościtabstop
jest równoważne, z tą różnicą, że jeśli zmienisztabstop
, zostanie zsynchronizowany, podczas gdy zero oznacza po prostu „ignoruj to, proszę”).źródło
softtabstop
ustawieniu na właściwą wartość, cofnięcie usunie wcięcie z odstępami, jakby to była tabulacja. co jest koniecznością dla rozsądnego użytku.Twoje zrozumienie
softtabstop
iexpandtab
jest błędne - więcstab
opcja, którą sugerujesz, nie byłaby zbyt przydatna.expandtab
jest, gdy chcesz używać spacji zamiast zakładki do wszystkiego . Jeśli ustawiszexpandtab
, Vim ignoruje tęsofttabstop
opcję i używatabstop
ishiftwidth
do obliczenia, ile spacji ma wstawić.softtabstop
jest tylko wtedy, gdy chcesz użyć kombinacji tabulatorów i spacji, pozwalając ci na wcięcie z precyzyjną kontrolą (2 lub 4 spacje), przy jednoczesnym zachowaniu większej szerokości tabulatora (zwykle 8), aby tekst pojawił się w innych aplikacjach . Ustawieniesofttabstop=tabstop
nic nie daje, ponieważ Vim zawsze będzie używał tabulatorów do wcięć.Aktualizacja: Jak wskazał kaizer.se , jeśli używasz
expandtab
, nadal musisz ustawić,softtabstop
czy chcesz, aby Vim cofał wiele spacji, tak jakby były one tabulatorami.źródło
tabstop
isofttabstop
stajesz się o jedną zmienną za dużo, gdyextpandtab
jest ustawiona, myślę, że mylisz się co do priorytetu. Po prostu spróbuj: ustawts=8 sts=4 et
i naciśnij tab; kursor znajdzie się w piątej kolumnie i zostaną wstawione cztery spacje, tak jak w przypadku ustawieniats=4 sts=0 et
.softtabstop
ustawieniu na właściwą wartość, cofnięcie usunie wcięcie z odstępami, jakby to była tabulacja. co jest koniecznością dla rozsądnego użytku.Czy tak często zmieniasz ustawienia białych znaków, że naprawdę potrzebujesz funkcji, aby tym zarządzać? Jeśli często bawisz się tabstopem, a także ustawiasz expandtab, prawdopodobnie z czasem będziesz mieć bałagan, gdy będziesz zmieniać pliki z różnymi wartościami przekazywanymi do
stab
. Dziś używam:call stab (4)
, jutro:call stab (2)
i w zeszłym tygodniu:call stab (8)
. Wygląda na to, że nawet jeśli to napiszesz, wkrótce przestaniesz go używać.Jeśli planujesz zawsze przekazywać tę samą wartość do dźgnięcia, dlaczego nie edytować po prostu ustawień globalnych? In vim:
i dodaj:
Oto jak jest konfigurowany mój plik .vimrc.
źródło
Jedną z przydatnych opcji jest
softtabstop=-1
ustawienie wartościshiftwidth
.Możesz również ustawić
shiftwidth
na 0, w którym to przypadkutabstop
wartość zostanie użyta.źródło