Kiedy kopiuję kod z innego pliku, formatowanie jest pomieszane, jak poniżej:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Jak mogę automatycznie sformatować ten kod w vimie?
Kiedy kopiuję kod z innego pliku, formatowanie jest pomieszane, jak poniżej:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Jak mogę automatycznie sformatować ten kod w vimie?
Odpowiedzi:
Wypróbuj następujące naciśnięcia klawiszy:
gg=G
Objaśnienie: ggprzechodzi na początek pliku, =jest poleceniem do naprawy wcięcia i Gkaże mu wykonać operację do końca pliku.
Lubię korzystać z programu Styl artystyczny. Według ich strony internetowej :
Artistic Style to narzędzie do wprowadzania kodu źródłowego, formatowania i upiększania języków programowania C, C ++, C # i Java.
Działa w systemach Windows, Linux i Mac. Będzie robił takie rzeczy, jak wcięcie, zamiana tabulatorów na spacje lub odwrotnie, umieszczanie spacji wokół operacji, które lubisz (konwersja if(x<2)do, ( x<2 )jeśli tak to lubisz), umieszczanie nawiasów klamrowych w tej samej linii co definicje funkcji lub przenoszenie ich do wiersz poniżej itp. Wszystkie opcje są kontrolowane przez parametry wiersza poleceń.
Aby użyć go w vimie, po prostu ustaw dla niego opcję formatprg, a następnie użyj polecenia gq. Na przykład mam w moim .vimrc:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb
więc za każdym razem, gdy otwieram plik .cpp, formatprg jest ustawiany z opcjami, które lubię. Następnie mogę wpisać gg, aby przejść na górę pliku igqG sformatować cały plik zgodnie z moimi standardami. Jeśli muszę ponownie sformatować tylko jedną funkcję, mogę przejść na górę funkcji, a następnie wpisać, gq][a ona sformatuje tylko tę funkcję.
Opcje, które mam dla astyle -T4pb, to tylko moje preferencje. Możesz przeglądać ich dokumenty i zmieniać opcje, aby formatować kod w dowolny sposób.
Oto demo. Przed astylem:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
Po astyle (gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
Mam nadzieję, że to pomaga.
Wtyczka vim-autoformat umożliwia formatowanie bufora (lub jego wyboru) za pomocą jednego polecenia: https://github.com/Chiel92/vim-autoformat . Wykorzystuje do tego programy w formacie zewnętrznym, z rezerwą na funkcję wcięć vima.
Uważam, że to clang-formatdziała dobrze.
W dokumentacji clang znajduje się kilka przykładowych skrótów klawiszowych
Wolę używać equalprgwiązania w vimie. Pozwala to wywoływać clang-formatz opcjami wcięcia G=gglub innymi =.
Wystarczy umieścić w pliku .vimrc następujące informacje:
autocmd FileType c,cpp setlocal equalprg=clang-format
sudo apt install clang-format
Podoba mi się, indentjak wspomniano powyżej, ale najczęściej chcę sformatować tylko niewielką część pliku, nad którym pracuję. Ponieważ indentmożna pobrać kod ze standardowego wejścia, jest to naprawdę proste:
:!indent.astyle zajmuje też standardowe wejście, więc możesz użyć tej samej sztuczki.
Chciałem dodać, że aby uniknąć pomyłki, w pierwszej kolejności możesz pisać :set pasteprzed wklejeniem. Po wklejeniu możesz wpisać :set nopastetakie rzeczy, jak js-beautify i wcięcia, aby znów działać.
:set paste!do tego, który przełącza wartość wklejania zamiast ustawiania. Ułatwia to wyłączenie, ponieważ wystarczy przewinąć kilka poleceń wstecz i nacisnąć Enter.