Powinno to być trywialne i może nawet być pomocne, ale nie mogę wymyślić, jak się nim poruszać. Jak szybko wciąć wiele linii w vi?
Powinno to być trywialne i może nawet być pomocne, ale nie mogę wymyślić, jak się nim poruszać. Jak szybko wciąć wiele linii w vi?
Odpowiedzi:
Użyj >polecenia. Aby wciąć pięć linii, 5>>. Aby zaznaczyć blok linii i wciąć go, Vjj>wciąć trzy linie (tylko Vim). Aby wciąć blok nawiasów klamrowych, umieść kursor na jednym z nawiasów klamrowych i użyj >%lub z dowolnego miejsca wewnątrz bloku >iB.
Jeśli kopiujesz bloki tekstu i chcesz wyrównać wcięcie bloku w nowej lokalizacji, użyj ]pzamiast po prostu p. To wyrównuje wklejony blok do otaczającego tekstu.
To shiftwidth
ustawienie pozwala także kontrolować liczbę spacji do wcięcia.
shiftwidth
ustawienie sposobu, aby to zmienić.
Ta odpowiedź podsumowuje inne odpowiedzi i komentarze do tego pytania oraz dodaje dodatkowe informacje na podstawie dokumentacji Vima i wiki Vima . Dla zwięzłości, ta odpowiedź nie rozróżnia poleceń specyficznych dla Vi i Vim.
W poniższych poleceniach „ponowne wcięcie” oznacza „wcięcie wierszy zgodnie z ustawieniami wcięcia ”. shiftwidth
jest podstawową zmienną kontrolującą wcięcie.
Ogólne polecenia
>> Indent line by shiftwidth spaces
<< De-indent line by shiftwidth spaces
5>> Indent 5 lines
5== Re-indent 5 lines
>% Increase indent of a braced or bracketed block (place cursor on brace first)
=% Reindent a braced or bracketed block (cursor on brace)
<% Decrease indent of a braced or bracketed block (cursor on brace)
]p Paste text, aligning indentation with surroundings
=i{ Re-indent the 'inner block', i.e. the contents of the block
=a{ Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block
>i{ Increase inner block indent
<i{ Decrease inner block indent
Można wymienić {
z }
lub B
na przykład =iB
jest poprawnym poleceniem tiret blok. Rzuć okiem na „Wcięcie bloku kodu” na dobry przykład wypróbowania tych poleceń.
Pamiętaj też o tym
. Repeat last command
, dzięki czemu polecenia wcięcia można łatwo i wygodnie powtarzać.
Ponowne wcięcie kompletnych plików
Inną częstą sytuacją jest konieczność poprawienia wcięć w pliku źródłowym:
gg=G Re-indent entire buffer
Możesz rozszerzyć ten pomysł na wiele plików:
" Re-indent all your C source code:
:args *.c
:argdo normal gg=G
:wall
Lub wiele buforów:
" Re-indent all open buffers:
:bufdo normal gg=G:wall
W trybie wizualnym
Vjj> Visually mark and then indent three lines
W trybie wstawiania
Te polecenia dotyczą bieżącej linii:
CTRL-t insert indent at start of line
CTRL-d remove indent at start of line
0 CTRL-d remove all indentation from line
Polecenia ex
Są one przydatne, gdy chcesz wciąć określony zakres linii bez poruszania kursorem.
:< and :> Given a range, apply indentation e.g.
:4,8> indent lines 4 to 8, inclusive
Wcięcie za pomocą markerów
Innym podejściem są markery :
ma Mark top of block to indent as marker 'a'
... przesuń kursor do położenia końcowego
>'a Indent from marker 'a' to current location
Zmienne rządzące wcięciem
Możesz ustawić je w swoim pliku .vimrc .
set expandtab "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4 "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4 "Indent by 4 spaces when pressing <TAB>
set autoindent "Keep indentation from previous line
set smartindent "Automatically inserts indentation in some cases
set cindent "Like smartindent, but stricter and more customisable
Vim ma inteligentne wcięcie oparte na typie pliku. Spróbuj dodać to do swojego .vimrc:
if has ("autocmd")
" File type detection. Indent based on filetype. Recommended.
filetype plugin indent on
endif
Bibliografia
>}
. Wielkie dzięki
Duży wybór to:
gg=G
Jest naprawdę szybki i wszystko jest wcięte ;-)
gg=G
powoduje wstawienie każdej linii, zaczynając od pozycji 1. Wszystkie białe spacje zostały usunięte. Czy jest coś jeszcze specyficznego dla XML?
set cindent
powinien być w vimrc lub powinien uruchomić się :set cindent
przed uruchomieniem tego polecenia
Spróbuj tego również w przypadku wcięcia z wcięciem C. Zrób :help =
więcej informacji:
={
Spowoduje to automatyczne wcięcie bieżącego bloku kodu, w którym się znajdujesz.
Lub tylko:
==
aby automatycznie wciąć bieżącą linię.
Kluczowe naciśnięcia dla bardziej wizualnych osób:
Wejdź do trybu poleceń:
Escape
Przejdź na początek obszaru, aby wciąć:
hjkl↑↓←→
Rozpocznij blok:
v
Przejdź na koniec obszaru, aby wciąć:
hjkl↑↓←→
(Opcjonalnie) Wpisz żądaną liczbę poziomów wcięcia
0..9
Wykonaj wcięcie na bloku:
>
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 bieżącej linii
==
Wcięcie wszystkich linii poniżej bieżącej linii
=G
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
=%
Są to najprostsze, ale potężne polecenia do wcięcia wielu linii.
vim
nie vi
.
vim
link, który został powiązany z vi
?
Oprócz odpowiedzi już udzielonej i zaakceptowanej, możliwe jest również umieszczenie znacznika, a następnie wcięcie wszystkiego, od bieżącego kursora do znacznika.
Tak więc wpisz, ma
gdzie chcesz górę wciętego bloku, przesuń kursor w dół tak daleko, jak potrzebujesz, a następnie wpisz >'a
(zwróć uwagę, że „ a
” można zastąpić dowolną prawidłową nazwą znacznika). Czasami jest to łatwiejsze niż 5>>
lub vjjj>
.
Idź na początek tekstu
Oprócz oferowanych rozwiązań, lubię robić różne rzeczy na raz >}
Po wybraniu bloku i użyciu >wcięcia następuje jego wcięcie, a następnie powrót do trybu normalnego. Mam to w moim pliku .vimrc:
vnoremap < <gv
vnoremap > >gv
Umożliwia wcięcie zaznaczenia tyle razy, ile chcesz.
Załóżmy, że używasz 2 spacji do wcięcia kodu. Rodzaj:
:set shiftwidth=2
Następnie:
Masz pomysł.
( Puste wiersze nie będą wcięte, co moim zdaniem jest miłe. )
Znalazłem odpowiedź w dokumentacji (g) vim dla bloków wcięcia:
:help visual-block
/indent
Jeśli chcesz przeliczyć polecenie, zrób to tuż przed wpisaniem znaku operatora: „v {move-around} 3>” (przesuń wiersze 3 wcięcia w prawo).
Piękno interfejsu użytkownika Vima polega na jego spójności. Polecenia do edycji składają się z polecenia i ruchu kursora. Ruchy kursora są zawsze takie same:
'
.Aby korzystać z vima, musisz nauczyć się poruszać kursorem i pamiętać repertuar poleceń, takich jak na przykład >wcięcie (i< „wychylenie”).
Tak więc, dla wcięcia linii od pozycji kursora do górnej części ekranu zrobić >H, >Gaby wciąć się w dolnej części pliku.
Jeśli zamiast pisać >H, piszesz , dHusuwasz ten sam blok linii, cHaby go zastąpić itp.
Niektóre ruchy kursora lepiej pasują do określonych poleceń. W szczególności %polecenie jest przydatne do wcięcia całego bloku HTML lub XML. Jeśli plik ma podświetloną składnię ( :syn on
), ustaw kursor w tekście znacznika (np. W „i” <div> i wprowadź>% spowoduje wcięcie do zamykającego znacznika </div>.
Oto jak działa Vim: trzeba pamiętać tylko ruchy kursora i polecenia oraz sposób ich mieszania. Tak więc moja odpowiedź na to pytanie brzmiałaby: „przejdź do jednego końca bloku linii, który chcesz wciąć, a następnie wpisz >polecenie i ruch na drugi koniec bloku”, jeśli wcięcie jest interpretowane jako przesunięcie linii, =jeśli wcięcie jest interpretowany jako ładny druk.
Zrób to:
$vi .vimrc
I dodaj tę linię:
autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent
Dotyczy to tylko pliku cpp. Możesz to zrobić dla innego typu pliku, również po prostu modyfikując typ pliku ...
Możesz użyć norm i
polecenia, aby wstawić podany tekst na początku wiersza. Aby wstawić 10 spacji przed wierszami 2-10:
:2,10norm 10i
Pamiętaj, że na końcu polecenia musi znajdować się spacja - będzie to znak, który chcemy wstawić. Możemy również wciąć wiersz z dowolnym innym tekstem, na przykład, aby wciąć każdy wiersz w pliku za pomocą pięciu znaków podkreślenia:
:%norm 5i_
Lub coś jeszcze bardziej fantazyjnego:
:%norm 2i[ ]
Bardziej praktycznym przykładem jest komentowanie kodu Bash / Python / etc znakiem #:
:1,20norm i#
Aby ponownie użyć wcięcia xzamiast i. Na przykład, aby usunąć pierwsze 5 znaków z każdej linii:
:%norm 5x
Szybki sposób na zrobienie tego przy VISUAL MODE
użyciu tego samego procesu co komentowanie bloku kodu.
Jest to przydatne, jeśli nie chcesz zmieniać swoich dyrektyw shiftwidth
lub korzystać z nich, set
i jest wystarczająco elastyczny, aby pracować z TABS lub SPACES lub dowolną inną postacią.
-- VISUAL MODE --
:
aby przejść do monituZastąpienie 3 wiodącymi spacjami:
:'<,'>s/^/ /g
Lub zastąpienie wiodącymi kartami:
:'<,'>s/^/\t/g
Krótkie wyjaśnienie:
'<,'>
- W obrębie wizualnie wybranego zakresu
s/^/ /g
- Wstaw 3 spacje na początku każdej linii w całym zakresie
(lub)
s/^/\t/g
- Wstaw Tab
na początku każdej linii w całym zakresie
Lubię zaznaczać tekst do wcięcia:
PS: możesz użyć tej :'a,'ztechniki do zaznaczenia zakresu dla dowolnej operacji (d, y, s /// itd.), W której możesz użyć linii, liczb lub %.
:help left
W ex mode
można użyć :left
lub, :le
aby wyrównać linie o określoną ilość. W szczególności, :left
będzie lewo linii zrównują się ze sobą [zakres]. Ustawia wcięcie w wierszach na [wcięcie] (domyślnie 0).
:%le3
lub :%le 3
lub :%left3
lub :%left 3
wyrówna cały plik, wypełniając go trzema spacjami.
:5,7 le 3
wyrówna linie od 5 do 7, wypełniając je trzema spacjami.
:le
bez żadnej wartości lub :le 0
pozostawi wyrównanie z wypełnieniem 0.
Działa to w Vimie i gVimie.
:'<,'>le4
wstawić spacje. Dzięki!
Dla mnie rozwiązaniem MacVim (Visual) było wybranie myszy i naciśnięcie „>”, ale po umieszczeniu następujących wierszy w „~ / .vimrc”, ponieważ lubię spacje zamiast tabulatorów:
set expandtab
set tabstop=2
set shiftwidth=2
Przydaje się również możliwość wywoływania MacVima z wiersza poleceń (Terminal.app), więc ponieważ mam następujący katalog pomocnika „~ / bin”, w którym umieszczam skrypt o nazwie „macvim”:
#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@
I oczywiście w „~ / .bashrc”:
export PATH=$PATH:$HOME/bin
MacPorts często ma problemy z „~ / .profile”, więc zmienna środowiskowa PATH może być dość długa.
5==
spowoduje wcięcie pięciu linii od bieżącej pozycji kursora.
Możesz więc wpisać wcześniej dowolną liczbę ==
. Wciśnie liczbę linii. To jest w trybie poleceń.
gg=G
spowoduje wcięcie całego pliku od góry do dołu.
Nie znalazłem metody, której używam w komentarzach, więc podzielę się nią (myślę tylko, że Vim):
Jest to przydatne, gdy nie chcesz zmieniać ustawień wcięć / zakładek vimrc
lub zapamiętywać ich w celu zmiany podczas edycji.
Aby cofnąć się, używam tego samego Ctrl+ Vzaznaczenia bloku, aby zaznaczyć spacje i usunąć je za pomocą D.
Nie wiem, dlaczego tak trudno jest znaleźć prostą odpowiedź jak ta ...
Sam musiałem dużo walczyć, żeby to wiedzieć. To jest bardzo proste:
.vimrc
plik w katalogu domowym.Dodaj tę linię
set cindent
w pliku, w którym chcesz prawidłowo wciąć.
W trybie normalnym / trybie poleceń
10== (This will indent 10 lines from the current cursor location)
gg=G (Complete file will be properly indented)
:line_num_start,line_num_end>
Na przykład,
14,21> shifts line number 14 to 21 to one tab
Zwiększ symbol „>”, aby wyświetlić więcej kart.
Na przykład,
14,21>>> for three tabs
:set number
aby przełączyć numery linii ( domyślnie są wyłączone ) lub wstawić set number
vimrc.
Często używam Pythona i często muszę przesuwać bloki o więcej niż jedno wcięcie. Możesz to zrobić za pomocą dowolnej metody zaznaczania bloku, a następnie po prostu wprowadź liczbę wcięć, które chcesz przeskoczyć tuż przed>
Na przykład V5j3>
trzykrotnie wcina pięć linii - co oznacza 12 spacji, jeśli użyjesz czterech spacji dla wcięć.
Opcja 1: Wcięcie bloku kodu w vi do trzech spacji w trybie Visual Block:
Wybierz blok kodu, który chcesz wciąć. Zrób to, używając Ctrl+Vtrybu normalnego i przesuwając w dół, aby zaznaczyć tekst. Gdy jest zaznaczone, wprowadź, :
aby wydać polecenie blokowi zaznaczonego tekstu.
W wierszu polecenia pojawią się następujące elementy: :'<,'>
Aby ustawić wcięcie na trzy spacje, wpisz le 3
i naciśnij klawisz Enter. Oto co się pojawia::'<,'>le 3
Zaznaczony tekst jest natychmiast wcięty do trzech spacji.
Opcja 2: Wcięcie bloku kodu w vi do trzech spacji w trybie linii wizualnej:
Przejdź do trybu normalnego i naciśnij następujące klawisze:
Vjjjj:le 3
Interpretacja tego, co zrobiłeś:
V
oznacza zacznij zaznaczać tekst.
jjjj
strzałki w dół o cztery linie, podświetlając cztery linie.
:
mówi vi, że wprowadzisz instrukcję dla podświetlonego tekstu.
le 3
oznacza wcięty podświetlony tekst w trzech wierszach.
Wybrany kod jest natychmiast zwiększany lub zmniejszany do wcięcia trzech spacji.
Opcja 3: użyj trybu Visual Block i specjalnego trybu wstawiania, aby zwiększyć wcięcie:
W trybie normalnym naciśnij następujące klawisze:
Ctrl+V
jjjj
(naciśnij klawisz spacji pięć razy)
Esc Shift+i
Cały podświetlony tekst jest wcięty o dodatkowe pięć spacji.
Używam selekcji wizualnej w trybie blokowym:
I
( Shift+ I), aby przejść do trybu wstawiania.To nie jest jednozadaniowiec. To działa:
c
zamiast I
).vim-prettier
zamiast domyślnego mechanizmu wcięcia). Użycie w >
przeciwnym razie spowoduje królewskie zwiększenie formatowania wykonanego przez Prettiera.
Aby wciąć cały plik o cztery:
esc 4G=G
Źródło: https://www.fir3net.com/UNIX/General/how-do-i-tab-multiple-lines-within-vi.html