Jakim poleceniem w Vimie jest poprawienie wcięcia wszystkich linii?
Często kopiuję i wklejam kod do zdalnego terminala i wszystko popsuję. Chcę to naprawić za jednym zamachem.
Jakim poleceniem w Vimie jest poprawienie wcięcia wszystkich linii?
Często kopiuję i wklejam kod do zdalnego terminala i wszystko popsuję. Chcę to naprawić za jednym zamachem.
Odpowiedzi:
=
polecenie wcięcia może wykonywać ruchy. Tak, gg
aby uzyskać początku pliku, =
do tiret, G
do końca pliku gg=G
.
''
(dwa pojedyncze cytaty) zabiera cię z powrotem do miejsca, w którym byłeś, więc gg=G''
powinieneś wciąć, a następnie wrócić.
Przed wklejeniem do terminala spróbuj, :set paste
a następnie :set nopaste
po zakończeniu. Spowoduje to wyłączenie automatycznego wcięcia, zawijania linii i innych funkcji, które psują wklejanie.
edit: Powinienem również =
zauważyć , że znacznie lepszy wynik niż wcięcie można zwykle uzyskać za pomocą zewnętrznego programu. Na przykład biegam :%!perltidy
cały czas. astyle
, cindent
itp. można również użyć. I oczywiście można mapować je na naciśnięcie klawisza i mapować różne na to samo naciśnięcie klawisza, w zależności od typu pliku.
equalprg
opcję we wtyczce ftpl, aby użyć =
wcięcia zewnętrznego filtra zamiast wcięcia klawisza.
formatpgm
z porządkiem i astyle, a potem gq
. Oto kilka przykładów z mojego .vimrc
: au FileType xml set fp=tidy\ -q\ -i\ -xml
iau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
Jeśli chcesz ponownie wprowadzić blok, w którym się znajdujesz, bez konieczności wpisywania żadnych akordów, możesz:
[[=]]
=aB
który w ogóle nie porusza kursorem.
[[=]]
wymaga 5 akordów :(
Panem wszystkich poleceń jest
gg=G
To wcina cały plik!
Poniżej znajdują się niektóre z prostych i eleganckich poleceń używanych do szybkiego wcięcia linii w Vimie lub gVimie.
Wcięcie wszystkich linii poniżej bieżącej linii
=G
Wcięcie bieżącej linii
==
Wcięcie n
linii poniżej bieżącej linii
n==
Na przykład, aby wciąć 4 linie poniżej bieżącej linii
4==
Aby wciąć blok kodu, przejdź do jednego z nawiasów klamrowych i użyj polecenia
=%
Do wcięcia plików HTML i XML można użyć schludnej aplikacji / narzędzia, a wcięcie tych plików działa całkiem dobrze.
Prettify plik XML
:!tidy -mi -xml %
Prettify plik HTML
:!tidy -mi -html %
naciśnij klawisz Escape, a następnie szybko wpisz poniższe kombinacje:
gg=G
1G=G
. To powinno wciąć wszystkie wiersze w pliku. 1G
zabierze Cię do pierwszego wiersza, =
rozpocznie automatyczne wcięcie, a ostatni G
zabierze Cię do ostatniego wiersza w pliku.
1gg=G
W Vimie użyj :insert
. Spowoduje to zachowanie całego formatowania i nie spowoduje automatycznego wcięcia. Aby uzyskać więcej informacji help :insert
.
vim-autoformat formatuje pliki źródłowe przy użyciu zewnętrznych programów specyficznych dla twojego języka, np. klejnot „rbeautify” dla plików Ruby, pakiet npm „js-beautify” dla JavaScript.
W przypadku złożonych plików C ++ vim nie zawsze poprawnie formatuje podczas używania =
polecenia filter w vimie . Dlatego w takich sytuacjach lepiej jest użyć zewnętrznego formatera C ++, takiego jak astyle (lub unrustify ), np .:
:%!astyle
Funkcja „=” Vima domyślnie korzysta z wewnętrznego formatera (który nie zawsze działa prawidłowo), ale można go również ustawić za pomocą zewnętrznego formatera, takiego jak astyle, ustawiając go odpowiednio, jak omówiono w tym pytaniu .
W przypadku plików XML używam tego polecenia
:1,$!xmllint --format --recover - 2>/dev/null
Musisz mieć zainstalowany xmllint (pakiet libxml2-utils)
(Źródło: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html )
Aby to zrobić, możesz utworzyć mapowanie.
Ten automatycznie wcina cały plik i nadal utrzymuje kursor w pozycji, w której się znajdujesz:
nmap <leader>ai mzgg=G`z
W przypadku edytora vi użyj: insert. Spowoduje to zachowanie całego formatowania i nie wstawi automatycznego wcięcia. Po zakończeniu naciśnij klawisz Escape, aby wyświetlić rzeczywisty sformatowany plik, w przeciwnym razie zobaczysz kilka śmieci. jak ^ ja np .:
public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert");
}
Po prostu przejdź do trybu wizualnego w vimie i wybierz z linii od góry do dołu po wybraniu po prostu naciśnij =, Wszystkie wybrane linie zostaną wcięte.
ggvG=
kiedy możesz gg=G
. Jaki był sens uwidocznienia ruchu? Dotyczy to wszystkich działań, które podejmują ruchy.