Oto jak zwykle kopiuję blok tekstu lub kodu:
- Wybierz blok za pomocą trybu Visual ( V) i usuń go za pomocą d; lub jeśli jest to tylko jedna linia, po prostu użyj dd.
- Idź tam, gdzie chcę być tekst, jestem zbyt głupi, żeby pamiętać o różnicy między pi Ptak mam to prawo o 50% czasu. (jeśli się mylę: spróbuj ponownie).
- Czasami wcięcie wymaga dostosowania, więc ponownie przechodzę do trybu wizualnego Vi ponownie wybieram ten sam blok i używam go >lub <naprawiam.
Czy istnieje prostszy sposób? W niektórych edytorach widziałem, że możesz „podnieść” blok tekstu i przenieść go; oto przykład z Emacsa (ale widziałem to również w innych edytorach):
A może istnieje inny (jeszcze lepszy) sposób?
cut-copy-paste
visual-mode
Martin Tournoij
źródło
źródło
]p
lub[p
zamiast,p
lubP
. W ten sposób blok, który wklejasz, będzie automatycznie wcięty.Odpowiedzi:
Jest do tego wtyczka: dragvisuals.vim .
Domyślnie nie wiąże żadnych kluczy, więc musisz to zrobić sam. Lubię mapować je na Control+ Arrow key:
Jest również wyposażony w klucz bonusowy do zduplikowania bieżącego wyboru:
Zalety tej wtyczki w porównaniu z innymi odpowiedziami:
Kolejną przydatną sztuczką, która to uzupełnia, są następujące skróty klawiszowe:
Spowoduje to ponowne wybranie ostatniego wyboru wizualnego po użyciu >w trybie Wizualnym, dzięki czemu można łatwiej dostosować wyrównanie (możesz także użyć klawiszy strzałek, ale spowoduje to przesunięcie o jedną postać, a nie o jedną
shiftwidth
).źródło
W kroku 3 możesz
gv=
zamiast tego użyć (=
oznacza wcięcie igv
oznacza „ponownie zaznacz ostatni wybór wizualny”).W przypadku zachowania Emacsa dodanie mapowań do pliku .vimrc byłoby dość proste:
Następnie możesz używać klawiszy strzałek w górę i w dół, aby poruszać się po wizualnym zaznaczeniu linii. (Oczywiście możesz mapować także na różne klucze, jeśli nie znosisz strzał).
(Można to zrobić przy normalnym wyborze wizualnym i przesuwając je również w lewo i prawo:
vnoremap <left> dhPgvhoho
ivnoremap <right> dpgvlolo
.)źródło
gv
przechodzi do ostatniego wyboru wizualnego, którym w tym przypadku byłby akapit, który został usunięty. czego mi brakuje?Możesz zmienić przypisanie niektórych klawiszy, aby przesuwać linie. Na przykład strzałki w górę i w dół, jeśli jesteś przyzwyczajony do poruszania się
hjkl
.Np. Na .vimrc
:m
, normalne polecenie przesunięcia linii+1
lub-2
aby wskazać linię w górę lub w dół (-1 utrzymuje linię w tym samym miejscu)gv
aby ponownie wybrać ten sam tekst wVISUAL
trybieTo rozwiązanie nie koliduje z rejestrami, więc każdy skopiowany tekst będzie nadal dostępny, a także ponownie sformatować kod, aby ustawić właściwe wcięcia itp.
źródło
=
(często zmienia zbyt wiele niepowiązanego formatowania).Najłatwiejszy sposób, aby to zrobić, jest udokumentowany tutaj: http://vimrcfu.com/snippet/77
Umieść następujące dane w pliku .vimrc
źródło
Jest kilka wtyczek do tego, ale wolę vima- unimpaired Tima Pope'a ( github ) (Ingo Karkat LineJuggler jest podobny).
Wizualnie wybierasz blok tekstu, a następnie robisz
]e
(e w celu wymiany), aby przesunąć blok w dół ([e
w innym kierunku). Użyj,.
aby powtórzyć czynność (Masz zainstalowany program repeat.vim , prawda). Jeśli pójdziesz za daleko, po prostu cofnij za pośrednictwemu
.Teraz osobiście myślę
p
iP
są tak powszechnymi poleceniami, że najlepiej byłoby się ich nauczyć przed stworzeniem złych nawyków. Następnie możesz użyć]p
do wklejenia tego samego wcięcia. Jeśli używasz niezniszczonego, możesz zrobić to,>p
aby wkleić poziom wcięcia głębiej lub=p
wkleić i sformatować.Jeśli masz trudności w zapamiętywaniu
p
, aP
to może pomóc myśleć o nich w kategoriacho
iO
poleceń, które jest rodzajem symetrii.Jak zauważyli inni, możesz użyć
gv
do ponownego wyboru selekcji wizualnej. Jeśli jednak umieścisz / wkleisz tekst, stracisz swój wybór wizualny. Nie denerwuj się, ponieważ każda zmiana (i szarpnięcie!) Zostanie ustawiona'[
i']
wokół zmienionego obszaru. Możesz więc wcinać za pomocą>']
(czytaj: przesuń w prawo do końca ostatniej zmiany) i użyj,.
aby powtarzać wcięcie, dopóki tekst nie znajdzie się we właściwym miejscu.Aby uzyskać więcej pomocy, zobacz:
źródło
Jeśli znasz numer wiersza, do którego chcesz przenieść blok tekstu, możesz użyć zakresu lub zaznaczenia wizualnego za pomocą
:move
polecenia, aby przenieść tam blok tekstu .Na przykład, jeśli mam następujący plik:
i chcę przesunąć linię a po linię c, umieszczam kursor na linii a i wchodzę
:m3
, a następnie linia jest przesuwana.Działa to również z przesunięciami +/-. W powyższym przykładzie można osiągnąć ten sam wynik,
:m+2
przesuwając linię o 2 linie w dół.W przypadku bloków tekstu jedyną różnicą jest dodanie zakresu lub zaznaczenia. Aby przenieść linie aaa i bbb na koniec pliku, użyj polecenia takiego jak
:1,2m$
($ = ostatnia linia) lub wizualnie wybierz linie i:m$
.źródło
:move
zobacz także vim.wikia.com/wiki/Moving_lines_up_or_down lub Tip 29 Duplikuj lub przenieś linie za pomocą poleceń „: t” i „: m” w książce Practical Vim autorstwa D. Neila.Wtyczka vim-move by matze
dostępne od
Domyślne odwzorowania w trybie wizualnym i normalnym:
źródło