Qual é o comando (ou atalho) para mover uma linha para cima ou para baixo no vim? Meu fluxo de trabalho atual é arrancar (copiar) a linha e excluí-la e depois colocar (colar) essa linha.
Qual é o comando (ou atalho) para mover uma linha para cima ou para baixo no vim? Meu fluxo de trabalho atual é arrancar (copiar) a linha e excluí-la e depois colocar (colar) essa linha.
Respostas:
Primeiro, você não precisa puxar e excluir; o último também colocará o conteúdo excluído no registro (padrão ou especificado). Portanto, ddp
/ ddkP
são comandos comuns para mover uma linha um para baixo / para cima.
Como alternativa, você pode usar o :move
comando, ie :move +1
/ :move -2
; isso não atrapalha o registro e você também pode mover intervalos inteiros. Você pode definir facilmente os mapeamentos de teclas para encurtar isso.
Se você não se importa com plugins (e com o conforto adicional que costuma vir com eles), o plug - in intacto de Tim Pope e meu plug-in LineJuggler fornecem ]e
/ [e
mapeamentos para mover linhas (e vários outros; Tim para uma variedade de usos, o meu focado no manuseio linha (s)).
O mais fácil é: :m+
ou :m-2
qual é a abreviação de :move
como Ingo sugeriu.
Ou usando o modo visual ( V) cortando a linha ( d/ x) e colando-a ( p- abaixo do cursor, Pacima do cursor) depois de mover o cursor para o lugar certo antes de colar (para resumir, é Vxp/ Vdp).
Ao mover várias linhas no modo visual, você deve usar :m '>+1
(para mover uma linha para baixo) ou :m '<-2
(para mover uma linha para cima).
Aqui está um exemplo de mapeamento útil ( 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>
que é semelhante ao texto sublime ( Win / OSX ).
Aqui estão algumas sugestões no 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
No modo normal ou no modo de inserção, pressione Alt-j para mover a linha atual para baixo ou pressione Alt-k para mover a linha atual.
Após selecionar visualmente um bloco de linhas (por exemplo, pressionando V e movendo o cursor para baixo), pressione Alt-j para mover todo o bloco para baixo ou pressione Alt-k para mover o bloco para cima.
Veja também:
FWIW, aqui está o que eu uso há anos. Move a linha atual para cima e para baixo no modo normal ou a seleção no modo visual, enquanto ajusta o recuo automaticamente.
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
, para baixo em movimento é mais fácil:ddp
.