Así es como suelo copiar un bloque de texto o código:
- Seleccione el bloque con el modo Visual ( V) y elimínelo con d; o si es solo una línea, solo utilícela dd.
- Vaya a donde quiero que esté el texto, soy demasiado estúpido para recordar la diferencia entre py P, así que lo hago bien aproximadamente el 50% del tiempo. (si me equivoco: vuelva a intentarlo).
- A veces, la sangría necesita un ajuste, por lo que voy al modo Visual Vnuevamente y vuelvo a seleccionar el mismo bloque, y uso >o <para solucionarlo.
hay una manera mas facil? En algunos editores he visto que puedes "recoger" un bloque de texto, por así decirlo, y moverlo; Aquí hay un ejemplo de Emacs (pero también lo he visto en otros editores):

¿O tal vez hay otra manera (incluso mejor)?
cut-copy-paste
visual-mode
Martin Tournoij
fuente
fuente

]po en[plugar depoP. De esta manera, el bloque que pegue será autoindentado.Respuestas:
Hay un complemento para eso: dragvisuals.vim .
No vincula ninguna tecla de forma predeterminada, por lo que deberá hacerlo usted mismo. Me gusta asignarlos a Control+ Arrow key:
También viene con una clave de bonificación para duplicar la selección actual:
Ventajas de este complemento sobre las otras respuestas:
Otro truco útil para complementar esto, son estas combinaciones de teclas:
Esto volverá a seleccionar la última selección visual después de usarla >en el modo Visual, para que pueda ajustar la alineación más fácilmente (también puede usar las teclas de flecha, pero esto lo moverá un carácter y no uno
shiftwidth).fuente
Para el paso 3, puede usar
gv=en su lugar (=significa sangría ygvsignifica "volver a seleccionar la última selección visual").Para el comportamiento de Emacs, sería bastante simple agregar algunas asignaciones en su .vimrc:
Luego puede usar las teclas de flecha arriba y abajo para moverse por una selección de línea visual. (Por supuesto, también podría asignar diferentes teclas si odia las flechas).
(Puede hacer esto con selecciones visuales normales y moviéndolas de izquierda a derecha también:
vnoremap <left> dhPgvhohoyvnoremap <right> dpgvlolo.)fuente
gvva a la última selección visual, que en este caso sería el párrafo que se eliminó. ¿Qué me estoy perdiendo?Puede reasignar algunas teclas para mover líneas. Por ejemplo, flechas arriba y abajo si está acostumbrado a moverse
hjkl.Por ejemplo, en .vimrc
:m, comando normal para mover una línea+1o-2para indicar una línea hacia arriba o hacia abajo (-1 mantiene la línea en el mismo lugar)gvpara seleccionar nuevamente el mismo texto enVISUALmodoEsta solución no interfiere con los registros, por lo que cualquier texto copiado seguirá estando disponible, así como formateará el código para establecer la sangría adecuada, etc.
fuente
=(a menudo cambia demasiado el formato no relacionado para mí).La forma más fácil que encontré para hacer esto está documentada aquí: http://vimrcfu.com/snippet/77
Ponga lo siguiente en su .vimrc
fuente
Hay pocos complementos para esto, pero prefiero el vim-intacto ( github ) de Tim Pope (Ingo Karkat LineJuggler es similar).
Usted selecciona visualmente su bloque de texto y luego lo hace
]e(e para intercambio) para mover el bloque hacia abajo ([een la otra dirección). Úselo.para repetir la acción (usted tiene repeat.vim instalado, ¿no es así?). Si va demasiado lejos, simplemente deshaga la rutau.Ahora personalmente pienso
pyPson comandos tan comunes que sería mejor aprenderlos antes de crear malos hábitos. Entonces podría usar]ppara pegar en la misma sangría. Si está utilizando sin daños, puede hacer>ppara pegar un nivel de sangría más profundo o=ppara pegar y reformatear.Si tiene problemas para recordar
pyPpodría ayudarlo a pensar en términos de los comandosoyO, que es una especie de simetría.Como otros han notado, puede usar
gvpara volver a seleccionar una selección visual. Sin embargo, si acaba de poner / pegar texto, habrá perdido su selección visual. No se preocupe porque cada cambio (¡y yanks!) Se establecerá'[y']alrededor del área cambiada. Entonces puede sangrar vía>'](leer: desplazarse a la derecha hasta el final del último cambio) y usar.para repetir la sangría hasta que tenga el texto en el lugar correcto.Para más ayuda ver:
fuente
Si conoce el número de línea al que desea mover el bloque de texto, puede usar un rango o una selección visual con el
:movecomando para mover el bloque hacia allí.Por ejemplo, si tengo el siguiente archivo:
y quiero mover la línea de a después de la línea de c, coloco el cursor en la línea de a e ingreso
:m3, y la línea se desplaza.Esto también funciona con +/- compensaciones. En el ejemplo anterior, se podría lograr el mismo resultado
:m+2para mover la línea 2 líneas hacia abajo.Para bloques de texto, la única diferencia es agregar un rango o selección. Para mover las líneas aaa y bbb al final del archivo, use un comando como
:1,2m$($ = última línea) o seleccione visualmente las líneas y:m$.fuente
:movever también vim.wikia.com/wiki/Moving_lines_up_or_down o el Consejo 29 Duplicar o mover líneas usando los comandos ': t' y ': m' en el libro Vim práctico de D. Neil.Plugin vim-move de matze
Disponible de
Mapeos predeterminados en modo visual y normal:
fuente