W Notepad ++ mogę użyć Ctrl+ Shift+ Up/, Downaby przesunąć bieżącą linię w górę lub w dół. Czy w Vimie jest podobne polecenie? Przeglądałem niekończące się przewodniki, ale nic nie znalazłem.
Jeśli nie, jak mogę powiązać działanie z tą kombinacją klawiszy?
Edycja: Odpowiedź Mykoli działa dla wszystkich linii, z wyjątkiem tych na początku i na końcu bufora. Przesunięcie pierwszej linii w górę lub dolnej linii w dół usuwa linię, a podczas przesuwania dolnej linii w górę, początkowo przeskakuje o dwa pola, jak pionek! Czy ktoś może zaoferować jakieś udoskonalenia?
Odpowiedzi:
Umieść następujące polecenie w pliku .vimrc, aby wykonać zadanie
Zniknięcie linii wygląda jak błąd Vima. Robię hack, aby tego uniknąć. Prawdopodobnie istnieje jakieś bardziej dokładne rozwiązanie.
Aktualizacja
Istnieje wiele niewyjaśnionych trudności związanych z używaniem kombinacji Vima. Są to brakujące linie i dodatkowe skakanie.
Oto rozwiązanie skryptowe, które można umieścić w .vimrc lub ~ / .vim / plugin / swap_lines.vim
źródło
<A-up>
jak w eclipse.ddkP
w ostatnim wierszu dokumentu. Wypróbuj sam na pliku 3-liniowym. Aby uniknąć takich problemów, użyj raczej łatwiejszych:m
mapowań podanych na wiki Vima .<A-up>
i,<A-down>
ale kiedy próbuję tych klawiszy w vimie w trybie wizualnym uruchomionym w tmux, zaznaczenie znika, a kursor przesuwa się w górę; bez przesuwania wybranych linii.Jeśli chcę zamienić jedną linię z linią powyżej, zwykle wykonuję następujące czynności
Wyjaśnienie
źródło
ddp
przesunąć linię w dół (usuń linię i wklej poniżej bieżącej linii)4 dd
a następnie przejdź do, powiedz 2 linii, a następnie:2
tam, gdzie chcesz wkleić iP
.4dd
zamiast4 dd
?dd<number>jp
aby przenieść bieżącą linię <numer> +1 linii w dół. Idd<number>kp
aby przenieść bieżącą linię <numer> linii w górę.Zakładając, że kursor znajduje się na linii, którą chcesz przenieść.
Poruszanie się w górę i w dół:
:m
do ruchu:m +1
- przesuwa się o 1 linię w dół:m -2
- przesuń o 1 linię w górę(Uwaga: możesz zastąpić +1 dowolnymi liczbami w zależności od tego, ile linii chcesz przesunąć w górę lub w dół, tj. +2 przesunąłby go w dół o 2 linie, -3 przesunąłby go w górę o 2 linie)
Aby przejść do określonej linii
:set number
- wyświetlaj linie numeryczne (łatwiej zobaczyć, gdzie go przenosisz):m 3
- przesuń linię po trzeciej linii (zamień 3 na dowolną linię, którą chcesz)Przenoszenie wielu linii:
V
(tj. Shift- V) i przesuwaj Courser w górę i w dół, aby wybrać wiele linii w VIMpo wybraniu naciśnij :i uruchom powyższe polecenia
m +1
itpźródło
noremap <c-s-up> :m -2<CR> noremap <c-s-down> :m +1<CR>
Przenieś linię w górę:
ddkP
Przesuń linię w dół:
ddp
źródło
.
powtarzania.To działało dla mnie:
http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file
BTW, jeśli chcesz użyć ALT + some_key, a twój terminal (urxvt robi to) odmawia spełnienia, powinieneś wpisać coś takiego w swoim .vimrc:
gdzie ^] to pojedynczy znak reprezentujący klawisz ALT. Aby wprowadzić ten znak, użyj C+v, Escw Vimie ( C+q, Escw systemie Windows).
źródło
[niv]noremap
są remapami dla normalnych trybów | wstawiania | wizualnego.<CR>
jestCarriage Return
(Enter
klucz).dodaj następujące do pliku ~ / .vimrc (upewnij się, że nie masz mapowania dla n, m)
teraz naciśnięcie
n
klawisza spowoduje przesunięcie linii w dół im
przesunięcie linii w górę.źródło
W trybie poleceń ustaw kursor na linii, którą chcesz przesunąć w dół, a następnie
Objaśnienie: dd usuwa bieżącą linię do bufora ogólnego p przywraca ją PO pozycji kursora lub, w przypadku całych linii, jedną linię poniżej.
Istnieje wiele nieporozumień dotyczących poleceń p i P w wielu dokumentach. W rzeczywistości p wkleja się PO kursorze, a P AT kursor.
źródło
Po prostu dodaj ten kod do .vimrc (lub .gvimrc)
źródło
Dokładnie to, czego szukasz w tej niesamowitej wtyczce: https://github.com/vim-scripts/upAndDown
źródło
Prostym rozwiązaniem jest umieszczenie w swoim
.vimrc
tych linii:źródło
Na końcu mojego pliku .vimrc umieszczam:
Zatem teraz „H” i „N” przesuwają linię odpowiednio w górę i w dół.
źródło
Oto uproszczona wersja dla MacVim, wykorzystująca przykłady artykułów z Wikii (por. Link z komentarza Gun ).
Używam tylko wariantu wyboru bloku, ponieważ wystarczy Shift-V, aby wybrać bieżącą linię, i opcjonalnie kursor w górę / w dół, aby wybrać więcej linii.
Zgodnie z powyższymi skrótami naciśnięcie Cmd-Shift-Up / Down spowoduje przesunięcie wyboru bloku w górę / w dół. „D” to klawisz Command w MacVimie, w systemie Windows spróbuj „C” (Control) lub „A” (Alt) (np. <CAf> to Control Alt f).
Artykuł Wikii dodaje do nich „= gv”, co powoduje dostosowanie wcięcia bloku po ruchu na podstawie otaczającego tekstu. Jest to mylące, więc usunąłem go i dodałem skróty do szybkiego wcięcia zaznaczenia.
Uwaga, to samo można zrobić z << i >>, ale wybór zostałby utracony, więc powyższe skróty pozwalają na wielokrotne wcięcie i nadal przesuwają blok, ponieważ wybór jest zachowany.
Mój MacVim jest skonfigurowany do przełączania Tab z Cmd-Shift-Left / Right, więc użyłem Cmd-Alt-Left / Right.
Oto przełączanie Tab dla MacVim (wstaw .gvimrc z resztą powyżej):
źródło
vim plugin unimpaired.vim [e i] e
źródło
Kiedy trafisz polecenia
:help move
wvim
, oto wynik::[range]m[ove] {address} *:m* *:mo* *:move* *E134* Move the lines given by [range] to below the line given by {address}.
Np .: Przenieś bieżącą linię o jedną linię w dół =>
:m+1
.Np .: Przesuń linię o numerze 100 poniżej linii o numerze 80 =>
:100 m 80
.Np .: Przesuń linię o numerze 100 poniżej linii o numerze 200 =>
:100 m 200
.Np .: Przenieś linie o numerze w obrębie [100, 120] poniżej linii o numerze 200 =>
:100,120 m 200
.źródło
Oto rozwiązanie, które działa na moim komputerze : MacBook Pro z systemem VIM 8.1
Te polecenia nie usuwają twoich linii na górze lub na dole bufora.
Używanie rzeczywistych symboli, które generują Alt-J i Alt-K, jest obejściem problemu dla ich kodów kluczy niepoprawnie mapowanych w moim środowisku.
Rzuć to w starym .vimrc i sprawdź, czy działa dla ciebie.
źródło
Dla mnie
ddkkp
to zrobiłem (zamiastddkP
wielkiej litery P, która też by działała).źródło
: m. + 1 lub: m.-2 zrobi się, jeśli przesuniesz jedną linię. Oto mój skrypt do przenoszenia wielu linii. W trybie wizualnym Alt-up / Alt-down przesuwa linie zawierające zaznaczenie wizualne w górę / w dół o jedną linię. W trybie wstawiania lub w trybie normalnym Alt-up / Alt-down przesunie bieżącą linię, jeśli nie podano prefiksu zliczania. Jeśli istnieje prefiks liczenia, Alt-up / Alt-down przesunie tyle linii, zaczynając od bieżącej linii góra / dół o jedną linię.
źródło
Jeśli chcesz to zrobić w wielu wierszach pasujących do określonego wyszukiwania:
:g/Your query/ normal ddp
lub:g/Your query/ m -1
:g/Your query/ normal ddp
lub:g/Your query/ m +1
źródło