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
]p
o en[p
lugar dep
oP
. 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 ygv
significa "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> dhPgvhoho
yvnoremap <right> dpgvlolo
.)fuente
gv
va 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+1
o-2
para indicar una línea hacia arriba o hacia abajo (-1 mantiene la línea en el mismo lugar)gv
para seleccionar nuevamente el mismo texto enVISUAL
modoEsta 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 ([e
en 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
p
yP
son comandos tan comunes que sería mejor aprenderlos antes de crear malos hábitos. Entonces podría usar]p
para pegar en la misma sangría. Si está utilizando sin daños, puede hacer>p
para pegar un nivel de sangría más profundo o=p
para pegar y reformatear.Si tiene problemas para recordar
p
yP
podría ayudarlo a pensar en términos de los comandoso
yO
, que es una especie de simetría.Como otros han notado, puede usar
gv
para 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
:move
comando 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+2
para 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
:move
ver 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