En Notepad ++, puedo usar Ctrl+ Shift+ Up/ Downpara mover la línea actual hacia arriba y hacia abajo. ¿Hay un comando similar a esto en Vim? He buscado en interminables guías, pero no he encontrado nada.
Si no lo hay, ¿cómo podría vincular la acción a esa combinación de teclas?
Editar: la respuesta de Mykola funciona para todas las líneas, excepto las del principio y el final del búfer. Mover la primera línea hacia arriba o la línea inferior hacia abajo elimina la línea, y cuando mueve la línea inferior hacia arriba, salta inicialmente dos espacios, ¡como un peón! ¿Alguien puede ofrecer algún refinamiento?
Respuestas:
Ponga lo siguiente en su .vimrc para hacer el trabajo
La desaparición de la línea parece un error de Vim. Puse un truco para evitarlo. Probablemente hay una solución más precisa.
Actualizar
Hay muchas dificultades inexplicables con solo usar combinaciones de Vim. Estas son líneas faltantes y saltos de línea adicionales.
Así que aquí está la solución de secuencias de comandos que se puede colocar dentro de .vimrc o ~ / .vim / plugin / swap_lines.vim
fuente
<A-up>
como se usa en eclipse.ddkP
en la última línea del documento. Pruébelo usted mismo en un archivo de 3 líneas. Para evitar tales problemas, utilice las:m
asignaciones mucho más fáciles que figuran en el wiki de Vim .<A-up>
y,<A-down>
pero cuando pruebo esas teclas en vim en ejecución visual en tmux, la selección desaparece y el cursor se mueve en línea; sin mover las líneas seleccionadas.Si quiero intercambiar una línea con la línea de arriba, generalmente hago lo siguiente
Explicación
fuente
ddp
para mover una línea hacia abajo (eliminar línea y pegar debajo de la línea actual)4 dd
y luego muévase a, diga 2 líneas, luego:2
donde quiera pegar yP
.4dd
eso en lugar de4 dd
?dd<number>jp
para mover la línea actual <número> +1 de líneas hacia abajo. Ydd<number>kp
para mover la línea actual <número> de líneas hacia arriba.Suponiendo que el cursor esté en la línea que desea mover.
Moviéndose hacia arriba y hacia abajo:
:m
para moverse:m +1
- baja 1 línea:m -2
- subir 1 líneas(Tenga en cuenta que puede reemplazar +1 con cualquier número dependiendo de cuántas líneas desee moverlo hacia arriba o hacia abajo, es decir, +2 lo movería hacia abajo 2 líneas, -3 lo movería hacia arriba 2 líneas)
Para moverse a una línea específica
:set number
- mostrar líneas de números (más fácil ver a dónde lo está moviendo):m 3
- mueva la línea después de la tercera línea (reemplace 3 por cualquier línea que desee)Moviendo múltiples líneas:
V
(es decir, Shift- V) y mueva el cursor hacia arriba y hacia abajo para seleccionar varias líneas en VIMuna vez seleccionado, presione :y ejecute los comandos anteriores,
m +1
etc.fuente
noremap <c-s-up> :m -2<CR> noremap <c-s-down> :m +1<CR>
Mover una línea hacia arriba:
ddkP
Mueve una línea hacia abajo:
ddp
fuente
.
repetir.Esto funcionó para mí:
http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file
Por cierto, si desea usar ALT + some_key y su terminal (urxvt hace esto) se niega a cumplir, debe ingresar algo como esto en su .vimrc:
donde ^] es un solo carácter que representa la tecla ALT. Para ingresar ese carácter, C+v, Escúselo en Vim ( C+q, Escen Windows).
fuente
[niv]noremap
son remapeos para los modos normales | insert | visual.<CR>
esCarriage Return
(Enter
clave)agregue lo siguiente al archivo ~ / .vimrc (asegúrese de no tener asignación para n, m)
ahora presionando la
n
tecla se moverá una línea hacia abajo ym
se moverá una línea hacia arriba.fuente
En el modo de comando, coloque el cursor en la línea que desea mover hacia abajo y luego
Explicación: dd elimina la línea actual al búfer general p la vuelve a colocar DESPUÉS de la posición del cursor, o en el caso de líneas enteras, una línea debajo.
Existe cierta confusión con respecto a los comandos p y P en muchos documentos. En realidad, p pega el cursor DESPUÉS y el cursor P AT.
fuente
Simplemente agregue este código a .vimrc (o .gvimrc)
fuente
Exactamente lo que estás buscando en este increíble complemento: https://github.com/vim-scripts/upAndDown
fuente
Una solución simple es poner en
.vimrc
estas líneas:fuente
Puse lo siguiente al final de mi archivo .vimrc:
Así que ahora 'H' y 'N' mueven la línea actual hacia arriba y hacia abajo respectivamente.
fuente
Aquí hay una versión simplificada, para MacVim, usando los ejemplos del artículo de Wikia (véase el enlace del comentario de gun ).
Estoy usando solo la variante de selección de bloque, porque todo lo que se necesita es Shift-V para seleccionar la línea actual, y opcionalmente el cursor hacia arriba / abajo para seleccionar algunas líneas más.
De acuerdo con los atajos anteriores, presionar Cmd-Shift-Up / Down desplazará la selección de bloque hacia arriba / abajo. "D" es la tecla Comando en MacVim, para Windows intente con "C" (Control) o "A" (Alt) (por ejemplo, <CAf> sería Control Alt f).
El artículo de Wikia agrega "= gv" a estos, lo que tiene el efecto de ajustar la sangría del bloque después del movimiento, según el texto circundante. Esto es confuso, así que lo eliminé y agregué accesos directos para sangrar rápidamente la selección.
Tenga en cuenta que lo mismo se puede hacer con << y >>, pero la selección se perdería, por lo que estos accesos directos anteriores permiten sangrar varias veces y aún mover el bloque porque la selección se mantiene.
Mi MacVim está configurado para cambiar las pestañas con Cmd-Shift-Izquierda / Derecha, así que usé Cmd-Alt-Izquierda / Derecha.
Aquí está el cambio de Tab para MacVim (poner en .gvimrc con el resto de arriba):
fuente
vim plugin unimpaired.vim [e y] e
fuente
Al llegar a comandos
:help move
envim
, aquí está el resultado::[range]m[ove] {address} *:m* *:mo* *:move* *E134* Move the lines given by [range] to below the line given by {address}.
Por ejemplo: mover la línea actual una línea hacia abajo =>
:m+1
.Por ejemplo: mover la línea con el número 100 debajo de la línea con el número 80 =>
:100 m 80
.Por ejemplo: mover la línea con el número 100 debajo de la línea con el número 200 =>
:100 m 200
.Por ejemplo: mover líneas con número dentro de [100, 120] debajo de la línea con número 200 =>
:100,120 m 200
.fuente
Aquí hay una solución que funciona en mi máquina : MacBook Pro con VIM 8.1
Estos comandos no eliminarán sus líneas en la parte superior o inferior de su búfer.
El uso de los símbolos reales que Alt-J y Alt-K generan es una solución alternativa para que sus códigos clave no se asignen correctamente en mi entorno.
Lance esto en el viejo .vimrc y vea si funciona para usted.
fuente
Para mí, lo
ddkkp
hice (en lugar deddkP
con una P mayúscula, que también funcionaría).fuente
: m. + 1 o: m.-2 lo harían si estás moviendo una sola línea. Aquí está mi script para mover varias líneas. En modo visual, Alt-arriba / Alt-abajo moverá las líneas que contienen la selección visual arriba / abajo en una línea. En modo de inserción o modo normal, Alt-arriba / Alt-abajo moverá la línea actual si no se proporciona el prefijo de conteo. Si hay un prefijo de conteo, Alt-up / Alt-down moverá esa cantidad de líneas comenzando desde la línea actual hacia arriba / abajo en una línea.
fuente
En caso de que quiera hacer esto en varias líneas que coincidan con una búsqueda específica:
:g/Your query/ normal ddp
o:g/Your query/ m -1
:g/Your query/ normal ddp
o:g/Your query/ m +1
fuente