Czy istnieje sposób automatycznego cofnięcia tabulacji wszystkiego w pliku źródłowym za pomocą polecenia? [Zamknięte]

11

A potem automatycznie ponownie wcięcia? Próbowałem skopiować kod z jednego ekranu terminala na drugi, ale tabulacja się popsuła.

Nie wiedziałem, jak nazwać tę funkcję, więc trudno było mi ją znaleźć w Google (co ogólnie zwróciło rzeczy związane z ustawieniem rozmiaru tabulatora, czego niestety nie szukałem).

Mroczny Templariusz
źródło
Powiązane: Jak zastąpić tabulatory spacjami? w Vim SE
kenorb
1
Głosuję za zamknięciem tego pytania jako nie na temat, ponieważ dotyczy ono narzędzia programistycznego. Pytania dotyczące narzędzi są lepiej dostosowane do StackOverflow , lub w tym przypadku, Vi.SE . To pytanie jest jednak zbyt stare, aby migrować.
1
Ja głosuje, aby zamknąć to pytanie jako off-topic, ponieważ jest o zastosowaniu konkretnego narzędzia i powinny być zadawane na przepełnienie stosu lub (jeśli poprosił razie) vi.se .

Odpowiedzi:

9

Vim ma retabpolecenie, które pozwala tabify lub cofnąć potwierdzenie dokumentu. Wykorzystuje ustawienia takie jak tabstopi expandtab. Jeśli więc chcesz zastąpić tabulatory spacjami, możesz wykonać następujące czynności:

:%retab

Zobacz szczegóły w retabdokumentacji.

Zastrzeżenie Emptor : zastępuje również zakładki, które NIE znajdują się na początku linii. Więc jeśli użyjesz twardych zakładek w środku ciągów, zostaną one również zastąpione.

Kaleb Pederson
źródło
3
Ogólnie rzecz biorąc, złym pomysłem jest umieszczenie prawdziwej tabulacji w ciągu. Może się to zdarzyć, ale \tjest zalecane, aby uniknąć tego rodzaju problemów.
Spencer Rathbun,
6

Aby rozwinąć odpowiedź @ Kaleba (nie mam jeszcze przedstawiciela, aby skomentować), przed wykonaniem polecenia retab będziesz musiał :set expandtab (set et). W przeciwnym razie zmiana nie zastąpi tabulatorów spacjami.

Dodatkowo możesz określić tabstopsy. Często w kodzie źródłowym utworzonym przez innych kod jest zapisywany z tabulatorami ustawionymi na 4 lub nawet 2. Przed wykonaniem :%retabpolecenia eksperymentuj z różnymi tabulatorami. Próbować

:set ts=8 (the default)
:set ts=4 
:set ts=2  

aby zobaczyć, które ustawienie jest najbardziej sensowne.

Aby przejść wstecz (zastępując spacje odpowiednimi znakami TAB, użyj

:set noet
:%retab!
Firstrock
źródło
1

Czy przez odznaczenie masz zamiar zmienić tabulatory na spacje? Jeśli tak, zamień spacje tabulatorami w całym buforze w następujący sposób:

:%s/^I/    /g

To cztery spacje po prawej stronie podstawienia, ale możesz ustawić dowolną liczbę. Aby uzyskać dosłowny ^Iznak tabulacji, możesz nacisnąć, ^Va następnie klawisz Tab.

Możesz ponownie wciąć za pomocą =polecenia. Aby ponownie wciąć całą zawartość bufora, użyj następujących poleceń:

gg
=G

Spowoduje to przejście na górę, a następnie ponowne wcięcie wszystkiego na dół.

boshvark
źródło
-1: Zastąpienie tabulatora stałą liczbą spacji prawie nigdy nie jest przydatne. Spowoduje to zmianę wyglądu dowolnej linii zawierającej tabulację poprzedzoną tabulatorem niebędącym tabulatorem.
kevin cline