La forma más rápida de mover el bloque de código a una línea específica

8

Supongamos que tiene código en las líneas 4, 5, 6. Luego, desea mover este bloque de código a la línea de punto de inicio 9 mientras elimina las líneas 4, 5, 6.

¿Cuál es la forma más rápida, es decir, la menor cantidad de pulsaciones de teclas, para lograr esto? ¿Sería una función personalizada más adecuada?

Edgar Aroutiounian
fuente

Respuestas:

6

Comenzando al comienzo de la línea 4 ( ESC 4 ESC g go M-4 M-g M-gpara ir allí), C-3 C-k C-2 C-n C-y(o ESC 3 C-k down down C-ysi no le gusta mantener presionados los modificadores) lo hará.

Si no desea hacer la aritmética en su cabeza, sino que selecciona líneas visualmente, entonces

  • Moverse al comienzo de la zona para moverse
  • C-SPC para establecer la marca
  • Avanzar hasta el comienzo de la primera línea para mantener
  • C-w cortar
  • Desplácese hacia el lugar donde desea insertar el texto cortado.
  • C-y pegar

No creo que haya ninguna forma de hacer esto más corto a menos que esté dispuesto a perder algo de flexibilidad (por ejemplo, si a menudo desea mover un bloque de exactamente tres líneas). Debe proporcionar tres ubicaciones: el comienzo del bloque para moverse, el final del bloque para moverse y el destino. En las secuencias anteriores, hay una sola pulsación de tecla en cada ubicación, que es lo más baja posible.

Gilles 'SO- deja de ser malvado'
fuente
8

Si la distancia no es grande, puede usar move-text :

ingrese la descripción de la imagen aquí

En términos de pulsaciones de teclas, para mí es:

  1. Seleccione región:

    C-SPCC-nC-nC-n

  2. Mover región:

    H-S-nH-S-nH-S-n

( move-text-downestá vinculado a H-S-n)

welldan97
fuente
También puede proporcionar un argumento numérico npara move-text-downy move-text-up. Esto acorta el paso (2) a M-3 H-S-n.
itsjeyd
3

Puede usar expand-region para marcar el bloque, si es una unidad semántica, como una función (el sitio web del paquete explica esto con más detalle). Luego, muévelo como explica la otra respuesta. Dependiendo de dónde se encuentre en el bloque, una sola tecla puede marcar todo.

rlazo
fuente
¿Puedes ampliar esto? ¿Qué quieres decir con un bloque real? ¿Como un bloque de funciones?
Edgar Aroutiounian
Sí, el término utilizado en el paquete es "unidades semánticas" que pueden ser palabra, línea, bloque de código, función, clase, archivo completo. He editado la respuesta para incluir un enlace al paquete que explica esto mejor.
rlazo
2

Si usted está utilizando evil-mode, puede utilizar alternativamente un excomando: :4,6m9(que moves líneas 4a 6la línea 9).

shosti
fuente
No tengo el punto de mencionar una característica exótica como la emulación vi cuando no tiene nada que ver con la pregunta.
Gilles 'SO- deja de ser malvado'
2
Gilles: evil-modeno es exactamente oscuro, tiene casi 18,000 descargas en melpa. Otra respuesta utilizada expand-region, que también es un paquete externo. Para un sitio de preguntas y respuestas, probablemente sea bueno incluir múltiples formas de lograr lo mismo con diferentes paquetes (aunque podría ser bueno presentar algunas pautas).
shosti