Tengo esto:
pick 887b66f add 222 Dziewiecsil to flowers new title
pick dc331cb new name of beginning commit
Y quiero conseguir esto:
pick dc331cb new name of beginning commit
pick 887b66f add 222 Dziewiecsil to flowers new title
¿Hay alguna forma de hacer esto de una manera rápida usando atajos de teclado?
git config --global core.editor <whatever>
, o para muchas cosas a la vez (incluido git) al incluirexport EDITOR=<whatever>
en su archivo.bashrc
.Respuestas:
Para intercambiar la línea actual con la siguiente, escriba
ddp
en el modo de comando.fuente
ddp
. Si aún no está en el modo de comando, presioneEsc
para entrar en el modo de comando.dd
elimina la línea actual después de copiarla en un "registro".p
copia ("pone") el contenido del registro en su búfer después de la línea actual. Del mismo modo, puede intercambiar dos caracteres conxp
o dos palabras condwwP
.dwwP
no funciona de la misma manera si las dos palabras están al final de una línea? (Y cambiar la última palabra en una línea con la primera palabra en la siguiente línea es aún más complicado).dd
elimina la línea actual, luego puede pegar la línea eliminada usandop
. Hay otra forma de usarm
. Conm
puedes mover líneas, es decir:m 1
moverá la línea actual después de la línea 1:m 0
moverá la línea actual hacia arriba:m $
moverá la línea actual hacia abajoEn su ejemplo, coloque el cursor en la primera línea y escriba
:m $
Más información: http://vim.wikia.com/wiki/Moving_lines_up_or_down
fuente
A pesar de que la pregunta es bastante antigua y está marcada como respondida, me gustaría extender la respuesta diciendo que puede usar los comandos del modo normal, que fueron proporcionados por Sven Marnach con
nnoremap
lo siguiente:Esto le permitirá mover líneas con Ctrl+ Upy Ctrl+ Downdentro de su archivo. Sin embargo, esto sobrescribirá el
@"
registro, que almacena la última cadena / palabra / letra / etc. copiada. Entonces, agregando "(reg) antesdd
yp
comandos, podemos solucionar esto:Aquí agregamos
"a
comandos antes de eliminar y pegar para almacenar nuestra línea en el@a
registro, por lo que su registro de copia predeterminado no se sobrescribirá. Sin embargo, puede sobrescribir el contenido del@a
registro (quién sabe, pero puede usarlo para algo importante en su caso de uso, pero este paso es un poco paranoico, puede omitirlo si lo desea), solucionemos eso también:(
<silent>
necesario para evitar hacer eco de nuestros comandos en la línea de mensajes en la parte inferior).Ahora tenemos dos mapeos que nos permiten mover líneas dentro del archivo con atajos de teclado. Puede redefinir los botones, yo uso Alt+ j/ k, que sería
<A-j>
y<A-k>
para esos comandos. Sin embargo, no todos los emuladores de terminal admiten asignaciones de teclas Alt AFAIK.fuente
Ejemplo:
con
:m-2
, interruptor (línea actual - 2)con
:m+1
interruptor (línea actual + 1)Puede mapear esto si lo desea.
fuente
Las asignaciones propuestas en la página de la wikia de Vim son en realidad la mejor manera de asignar combinaciones de teclas que emulan la forma en que Sublime y otros editores implementan esta función.
Esto incluye una acción de sangría después del movimiento, que también es genial (son los
==
signos de doble igual , en caso de que no lo desee).También es compatible con los modos visual y de inserción , para que pueda mover líneas mientras edita o con fulblocks.
Los asigné personalmente a mi Mac
<D-J>
y<D-K>
en mi Mac, en lugar de los<A-
mapas a la Altclave. De esa manera utilizo Cmd+ Shift+ j/ k, que se siente más natural en la punta de mis dedos.fuente