Czy można konwertować tabulatory na spacje, zachowując wyrównanie tekstu?
Po prostu zamiana działa tylko wtedy, gdy nie ma wiodących postaci.
indentation
tab-characters
ideasman42
źródło
źródło
:h vim-faq
i wyszukać/tab characters
. Trudno zapamiętać tag:h faq-14.16
.Odpowiedzi:
Możesz użyć
:retab
polecenia. Od:help :retab
Zauważ, że polecenie akceptuje zakres, więc możesz dokonać wizualnego wyboru, a następnie tylko
:retab
wybranych linii.źródło
Można jednak użyć
:retab
, jak wspomniano, spowoduje to zmianę wszystkich tabulatorów na spacje, nie tylko tabulatory na początku wierszaWięc to (gdzie
⇥
jest znak tabulacji):zmienia się na (gdzie
␣
jest spacja):Może to powodować nieoczekiwane skutki uboczne w niektórych scenariuszach, a to jeszcze większy problem przy zmianie spacji na tabulatory!
Tak więc napisałem małą funkcję zmiany tylko tabulatorów / spacji na początku wiersza:
W tej wersji musisz ręcznie określić
expandtab
w wywołaniu funkcji (tj.:call Retab(1)
Zmienić tabulatory na spacje), ale możesz również zmodyfikować ją, aby przyjmowała bieżącą wartość&expandtab
(jak to już ma miejsce&tabstop
), tak jak to:retab
robi. (Zdarza mi się to określać ręcznie).źródło
a
wif a:expandtab
średniej?set expandtab
w .vimrc, a następnieautocmd BufWritePre * :call Retab(&expandtab)
- wcięcie zostanie zmienione na tabulatory zamiast spacji.Vim udostępnia
!retab
polecenie, które zastąpi wszystkie sekwencje<Tab>
nowymi ciągami białych znaków za pomocą:set tabstop=2
podanej nowej wartości tabstop (np. ), Ale wszystkie tabulacje wewnątrz ciągów można modyfikować (np. W programie C należy\t
tego uniknąć)!Alternatywnie możesz zmienić wszystkie tabulatory na spacje, używając następującego polecenia:
lub zgodnie z sugestią @Shahbaz :
Tak więc konwertowane są tylko tabulatory używane w wcięciach.
Wyjaśnienie:
%
reprezentuje cały bufor / plik (:help :%
)s
oznacza substytut (:help sub-replace-special
)\t
lub^I
oznacza tab- użyj tyle spacji, ile potrzebujesz na jedną kartę
g
- oznacza globalny i przekształci wiele wystąpień kart w tym samym wierszuNastępnie skorygować wcięcia całego pliku, możesz spróbować: gg=G. Sprawdź: Ponowne wcięcie źle źle wciętego kodu, aby uzyskać więcej szczegółów.
Aby domyślnie używać spacji zamiast tabulatorów, musisz dodać do
.vimrc
pliku następujące ustawienia :Alternatywnym rozwiązaniem jest użycie
tidy
Związane z:
źródło
%s/^\t\+/ g
tak, aby konwertowane były tylko tabulatory używane w wcięciach. Ponadtogg=G
może być katastrofalny w przypadku języków takich jak python.Spróbuj użyć:
expand
to narzędzie wiersza polecenia do konwersji tabulatorów na spacje, które można uruchomić z powłoki lub za pomocą:!expand
.Jest w POSIX, więc powinien być dostępny na większości systemów.
unexpand
nawiasem mówiąc, zrobi odwrotnie.źródło
expand
?:%!expand -t 4
w vimie. Jeszcze lepiej, możesz również użyć bieżącej opcji szerokości przesunięcia::exe '%!expand -t ' . &shiftwidth
Dla kompletności
=
można go również użyć do naprawy wcięć, po określeniu, że tabulatory są zastępowane spacjami. W trybie normalnym możesz to zrobić, pisząc:set expandtab
. Następnie=
można go użyć na dwa sposoby:=
naprawiałby wcięcia wybranych bloków kodu.gg=G
naprawiałby cały plik, w którymgg
przesuwa kursor na początek pliku, a następnie=
jest stosowany iG
przesuwa kursor na koniec pliku.Odniesienie: link
źródło