Что такое команда (или ярлык) для перемещения строки вверх или вниз в vim? Мой текущий рабочий процесс состоит в том, чтобы выдернуть (скопировать) строку и затем удалить эту строку, а затем поставить (вставить) эту строку.
Что такое команда (или ярлык) для перемещения строки вверх или вниз в vim? Мой текущий рабочий процесс состоит в том, чтобы выдернуть (скопировать) строку и затем удалить эту строку, а затем поставить (вставить) эту строку.
Ответы:
Во-первых, вам не нужно дергать и удалять; последний также помещает удаленное содержимое в регистр (по умолчанию или указанный). Поэтому ddp
/ ddkP
- это общие команды для перемещения на одну строку вверх / вниз.
В качестве альтернативы вы можете использовать :move
команду, т.е. :move +1
/ :move -2
; это не загромождает регистр, и вы также можете перемещать целые диапазоны. Вы можете легко определить сопоставления клавиш, чтобы сократить это.
Если вы не возражаете плагинов (и дополнительный комфорт , который часто приходит с ними), и Тим папы незатронутым плагин и мой плагин LineJuggler обеспечивают ]e
/ [e
отображения для перемещения строк (и еще несколько, Тим для различных целей, мое внимание на обработке линии (ы)).
Самый простой из них: :m+
или :m-2
это аббревиатура, :move
как предложил Инго.
Или используя визуальный режим ( V), обрезав линию ( d/ x), затем вставьте ее ( p- под курсором, Pнад курсором) после перемещения курсора в нужное место перед вставкой (так что в итоге это Vxp/ Vdp).
При перемещении нескольких строк в визуальном режиме вам необходимо использовать :m '>+1
(для перемещения на одну строку вниз) или :m '<-2
(для перемещения на одну строку вверх).
Вот пример полезного отображения ( Shift+ ↑/ Shift+↓):
nnoremap <S-Up> :m-2<CR>
nnoremap <S-Down> :m+<CR>
inoremap <S-Up> <Esc>:m-2<CR>
inoremap <S-Down> <Esc>:m+<CR>
который похож на Sublime Text ( Win / OSX ).
Вот некоторые из предложенных на vim wikia :
nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
inoremap <A-j> <Esc>:m .+1<CR>==gi
inoremap <A-k> <Esc>:m .-2<CR>==gi
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv
В обычном режиме или в режиме вставки нажмите Alt-j, чтобы переместить текущую строку вниз, или нажмите Alt-k, чтобы переместить текущую строку вверх.
После визуального выбора блока линий (например, нажав V, затем переместив курсор вниз), нажмите Alt-j, чтобы переместить весь блок вниз, или нажмите Alt-k, чтобы переместить блок вверх.
Смотрите также:
Если я хочу поменять одну строку на строку выше, я обычно делаю следующее
ddkP
объяснение
ddp
FWIW, вот то, что я использовал в течение многих лет. Он перемещает текущую строку вверх и вниз в обычном режиме или выделение в визуальном режиме, одновременно настраивая отступ.
nnoremap ,<Up> :<C-u>silent! move-2<CR>==
nnoremap ,<Down> :<C-u>silent! move+<CR>==
xnoremap ,<Up> :<C-u>silent! '<,'>move-2<CR>gv=gv
xnoremap ,<Down> :<C-u>silent! '<,'>move'>+<CR>gv=gv
ddkP
, двигаясь вниз проще:ddp
.