Próbuję zrobić automatyczne wcięcie vim za pomocą tabulatorów i wyrównanie do białych znaków, ale tak naprawdę wcięcie vim za pomocą tabulatorów i wypełnienie wyrównania tabulatorami + białymi spacjami.
Vim to robi:
(każdy blok to zakładka)
{
>--long a = 1,
>-->--..b = 2,
>-->--..c = 3;
}
Może to zrobić:
{
>--long a = 1,
>--.....b = 2,
>--.....c = 3;
}
Myślę, że jest wiele pytań na temat tabulatorów i spacji, ale żadne z nich nie zapewnia rozwiązania Just Works:
- /programming/8493705/vim-use-tabs-for-indentation-spaces-for-alignment-with-c-source-files
- /programming/29208431/vim-indent-with-tabs-align-with-spaces
- /programming/6504507/vim-indenting-and-alignment-combining-spaces-and-tabs
Właściwie używam:
set ai
set cindent
set cinoptions=(0,:0,u0,U0,g0)
Próbowałem wtyczki Smart Tab , która wydaje się działać dobrze, ale kiedy próbuję, gg=G
pojawiają się dziwne błędy:
Error detected while processing function CtabRedoIndent..<SNR>12_CheckAlign:
line 11:
E108: No such variable: "b:ctab_lastalign"
Press ENTER or type command to continue
Error detected while processing function CtabRedoIndent:
line 10:
E170: Missing :endwhile
Ta dyskusja wydaje się być bardzo stara, więc teraz, w 2015 roku istnieje oficjalne rozwiązanie, aby sobie z tym poradzić?
tab-characters
whitespace
tjbrn
źródło
źródło
Odpowiedzi:
Wykonanie tego naprawdę automatycznie jest trudne. Vim nie wie, co to jest „wcięcie”, a co „wyrównanie”; a niektórzy ludzie mogą nie zgadzać się co do tego, co dokładnie stanowi wcięcie i wyrównanie.
To powiedziawszy, wtyczka Smart Tabs została zaprojektowana do robienia tego, co chcesz; Przekonałem się, że działa dość dobrze w przypadku plików C, ale ma wiele zastrzeżeń; to łamie plików Python, na przykład, a nie jakiś nieoczekiwany (przynajmniej dla mnie) rzeczy dla plików C w czasie.
Patrząc na źródło, nie mogę naprawdę zrozumieć, jak to działa w ciągu 5 minut, aw połączeniu z faktem, że psuje pewne rzeczy, powinieneś powiedzieć, abyś postępował ostrożnie ...
źródło
Wspomniana wtyczka Smart Tabs jest tak dobra, jak to tylko możliwe. Początkowo napotkałem ten sam błąd, który zrobiłeś i zrezygnowałeś, ale ostatecznie poświęciłem kilka minut, aby go naprawić. Spróbuj zastosować następującą łatkę:
Później odkryłem, że ktoś zaproponował podobną poprawkę w sekcji wiki Smart Tabs . Niestety, nie było nowej wersji.
źródło
Wcięcie w vimie wykonuje się po prostu za pomocą następującego skryptu
Skrypt do wykonania wcięcia pojedynczego pliku
źródło