Jak naprawić wcięcia całego pliku w Vi?

W Vimie, jakie jest polecenie poprawiające wcięcia wszystkich linii?

Często kopiuję i wklejam kod do zdalnego terminala i wszystko się popsuło. Chcę to naprawić za jednym zamachem.

Author: Conner, 2009-02-03

16 answers

=, polecenie wcięcia może przyjmować ruchy. Tak więc, gg Aby uzyskać początek pliku, = do wcięcia, G do końca pliku, gg=G.

 1263
Author: Logan Capaldo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 03:05:22

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ż zaznaczyć, że znacznie lepszy wynik niż = wcięcia można zwykle uzyskać za pomocą zewnętrznego programu. Na przykład, biegam :%!perltidy cały czas. astyle, cindent, itd. może być również używany. Oczywiście możesz odwzorować je na obrys klawisza i odwzorować różne na to samo naciśnięcie klawisza w zależności od typu pliku.

 130
Author: derobert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-29 19:56:26

Mistrzem wszystkich poleceń jest

gg=G

To wcięło cały plik!

I poniżej kilka prostych i eleganckich poleceń używanych do szybkiego wcinania linii w Vim lub gVim.

Aby wciąć wszystkie linie poniżej bieżącej linii

=G

Aby wciąć bieżący wiersz

==

To indent n wiersze poniżej bieżącego wiersza

n==

Na przykład, aby wciąć 4 linie poniżej bieżącego wiersza

4==

Aby wciąć blok kodu, przejdź do jeden z szelek i użyj polecenia

=%
 33
Author: Sagar Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-14 06:39:54

Jeśli chcesz reindentować blok, w którym się znajdujesz, bez konieczności wpisywania żadnych akordów, możesz to zrobić:

[[=]]
 31
Author: Andrew Wagner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-02 03:44:55

Możesz użyć tidy application / utility, aby wciąć pliki HTML i XML i działa całkiem dobrze w wcięciach tych plików.

Utwórz plik XML

:!tidy -mi -xml %

Utwórz plik HTML

:!tidy -mi -html %
 17
Author: Naga Kiran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 03:06:37

Naciśnij escape, a następnie wpisz poniżej kombinacje szybko:

gg=G
 16
Author: tokhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-02 13:22:19

1G=G. Powinno to wcięć wszystkie linie w pliku. 1G pobierze pierwszą linię, = uruchomi automatyczne wcięcie, a ostatnia G przeniesie ostatnią linię w pliku.

 12
Author: Amjith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 03:05:53

Jeśli nie chcesz używać :set paste, Kliknij środkowym przyciskiem myszy, set nopaste, Możesz również wkleić zawartość schowka:

"*p
"+p

W ten sposób nie musisz opuszczać normalnego trybu. jeśli musisz wkleić + lub * zależy od tego, jak zaznaczyłeś tekst, zobacz :help quoteplus.

 8
Author: 0x89,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-21 22:05:47

:set paste Czy twój przyjaciel używam putty i kończy się kopiowanie kodu między oknami. Zanim zostałem włączony do :set paste (i :set nopaste) kopiuj / wklej dał mi pasuje właśnie z tego powodu.

 8
Author: Elsporko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-01 03:06:16

W Vim, użyj :insert. Spowoduje to zachowanie całego formatowania i nie spowoduje autoindentowania. Więcej informacji help :insert.

 6
Author: Eric Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-03 05:44:14

Vim-autoformat formatuje pliki źródłowe za pomocą zewnętrznych programów specyficznych dla Twojego języka, np. gem" rbeautify "dla plików Ruby, pakiet" js-beautify " npm dla JavaScript.

 4
Author: Wojtek Kruszewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-29 19:57:57

Dla złożonych plików C++ vim nie zawsze uzyskuje poprawne formatowanie przy użyciu polecenia = filter Vima. Dlatego w takich sytuacjach lepiej jest użyć zewnętrznego formatera C++ jak astyle (lub uncrustify) np.:

:%!astyle

Funkcja Vima '=' domyślnie używa swojego wewnętrznego formatera (co nie zawsze robi to dobrze), ale można również ustawić go za pomocą zewnętrznego formatera, takiego jak astyle, ustawiając go odpowiednio, jak omówiono w to pytanie .

 3
Author: Pierz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:54

Dla 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 )

 2
Author: alphayax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-26 10:16:45

Możesz utworzyć mapowanie, aby to zrobić za Ciebie.

Ten automatycznie wcięje cały plik i utrzyma kursor w pozycji, w której się znajdujesz:

nmap <leader>ai mzgg=G`z
 1
Author: Sergio D. Márquez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-08 22:06:33

W edytorze vi użyj :insert. Spowoduje to zachowanie całego formatowania i nie wstawia automatycznego wcięcia.Po zakończeniu naciśnij escape, aby zobaczyć rzeczywisty sformatowany plik, w przeciwnym razie zobaczysz kilka znaków śmieci. jak ^I e. g:

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}
 0
Author: ps2090,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-23 15:35:04

Po prostu przejdź do trybu wizualnego w Vimie i wybierz od góry do dołu linie po wybraniu just press =, Cała wybrana linia zostanie wcięta.

 0
Author: Ramanand Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-04 12:14:10