¿Cuál es el comando (o acceso directo) para mover una línea hacia arriba o hacia abajo en vim? Mi flujo de trabajo actual es tirar (copiar) la línea y luego eliminar esa línea y luego poner (pegar) esa línea.
¿Cuál es el comando (o acceso directo) para mover una línea hacia arriba o hacia abajo en vim? Mi flujo de trabajo actual es tirar (copiar) la línea y luego eliminar esa línea y luego poner (pegar) esa línea.
Respuestas:
Primero, no necesita tirar y eliminar; este último también colocará los contenidos eliminados en el registro (predeterminado o especificado). Por lo tanto, ddp
/ ddkP
son comandos comunes para mover una línea hacia abajo / arriba.
Alternativamente, puede usar el :move
comando, es decir :move +1
/ :move -2
; esto no golpea el registro, y también puede mover rangos completos. Puede definir fácilmente las asignaciones de teclas para acortar esto.
Si no le importan los complementos (y la comodidad adicional que a menudo viene con ellos), tanto el complemento intacto de Tim Pope como mi complemento LineJuggler proporcionan ]e
/ [e
mapeos para mover líneas (y varios más; Tim para una variedad de usos, el mío se centró en el manejo líneas)).
La más fácil es: :m+
o :m-2
que es la abreviatura de :move
como sugirió Ingo.
O utilice el modo visual ( V) cortando la línea ( d/ x) y luego péguela ( p- debajo del cursor, Pencima del cursor) después de mover el cursor al lugar correcto antes de pegar (en resumen, es Vxp/ Vdp).
Al mover varias líneas en modo visual, debe usar :m '>+1
(para mover una línea hacia abajo) o :m '<-2
(para mover una línea hacia arriba).
Aquí hay una muestra de mapeo ú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 es similar a Sublime Text ( Win / OSX ).
Aquí hay algunos sugeridos en 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
En modo normal o en modo de inserción, presione Alt-j para mover la línea actual hacia abajo, o presione Alt-k para mover la línea actual hacia arriba.
Después de seleccionar visualmente un bloque de líneas (por ejemplo, presionando V y luego moviendo el cursor hacia abajo), presione Alt-j para mover todo el bloque hacia abajo, o presione Alt-k para mover el bloque hacia arriba.
Ver también:
Si quiero intercambiar una línea con la línea de arriba, generalmente hago lo siguiente
ddkP
Explicación
ddp
FWIW, esto es lo que he usado durante años. Mueve la línea actual hacia arriba y hacia abajo en modo normal o la selección en modo visual, mientras ajusta la sangría automáticamente.
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
, abajo en movimiento es más fácil:ddp
.