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: gg
przechodzi na początek pliku, =
jest poleceniem do naprawy wcięcia i G
każ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-format
działa dobrze.
W dokumentacji clang znajduje się kilka przykładowych skrótów klawiszowych
Wolę używać equalprg
wiązania w vimie. Pozwala to wywoływać clang-format
z opcjami wcięcia G=gg
lub 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ę, indent
jak wspomniano powyżej, ale najczęściej chcę sformatować tylko niewielką część pliku, nad którym pracuję. Ponieważ indent
moż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 paste
przed wklejeniem. Po wklejeniu możesz wpisać :set nopaste
takie 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.