cut-copy-paste – Cómo pegar un bloque visual comenzando con otra línea

Pregunta:

Me tomó mucho tiempo darme cuenta de que poner (pegar) algo con p o P que el bloque visual selecciona con ctrl+v y tirar (copiar) con y , conserva la forma anterior, de modo que, cuando el texto copiado estaba en en el medio de las líneas, luego se copiará entre el medio de otro texto siempre que sea posible. Por el contrario, select-line con V no pega la línea copiada entre otro texto, sino comenzando en otra línea.

Por ejemplo, supongamos que ya tengo:

12/12: Avocado. Apple.
12/13: Bean.    Banana.
12/14: Cherry.  Citron.
12/15:
12/16:
12/17:

Cuando quiero cortar Avocado y Bean y Cherry , seleccionando (selección representada como _ )

12/12: ________ Apple.
12/13: ________ Banana.
12/14: ________ Citron.
12/15:
12/16:
12/17:

y presionando y , y mueva el cursor a la siguiente línea (cursor representado como _ ),

12/12: Avocado. Apple.
12/13: Bean.    Banana.
12/14: Cherry.  Citron.
_2/15:
12/16:
12/17:

y presione P Resulta:

12/12: Avocado. Apple.
12/13: Bean.    Banana.
12/14: Cherry.  Citron.
Avocado.12/15:
Bean.   12/16:
Cherry. 12/17:

Pero lo que deseaba era:

12/12: Avocado. Apple.
12/13: Bean.    Banana.
12/14: Cherry.  Citron.
Avocado.
Bean.   
Cherry. 
12/15:
12/16:
12/17:

Esto me confundía cada vez, hasta que me di cuenta de que debido a que se copiaron en el medio de la línea, se pegaron en el medio de la línea, imitando la forma en que estaban.

Parece que la mejor manera de pegar algo comenzando en otra línea, es moviendo el cursor al principio con 0 , y hacia abajo 3 líneas, al nuevo lugar; y entrando en el modo de inserción con i , y presionando <return> 3 veces, y mueva el cursor hacia atrás 6 líneas, y hacia la derecha, de regreso al lugar original; y copiando, y nuevamente muévete al nuevo lugar y pégalo, como hice anteriormente.

¿Puedo guardar algunos trazos? ¿O qué sueles hacer?

(Editar: Lo que se dijo anteriormente fue cómo lo entendí en el momento en que pregunté esto. Vea esas respuestas para una explicación correcta:)

Respuesta:

Cuando copia algún texto, entra en un registro. El texto dentro de un registro tiene un tipo: characterwise , linewise o blockwise .

Este tipo determina de qué manera se colocará el texto.

En su ejemplo, copió texto del modo de bloque visual. Entonces, el texto tenía el tipo de blockwise y se almacenó en el registro sin nombre " .
Debido a este tipo, cuando lo pegue nuevamente dentro de su búfer, se pegará como un bloque.


Si desea pegarlo como una secuencia de líneas, en lugar de un bloque, hay 3 formas.

  1. Desde el modo de inserción, puede insertarlo presionando Cr " .
    Debe insertar el contenido del registro sin nombre como si su tipo fuera linewise.

  1. Desde la línea de comando, puede usar el comando :put .
    :put debe pegar el texto dentro de un registro como si su tipo fuera en línea, sin importar su tipo original. Tenga en cuenta que puede pasar el nombre de un registro como argumento, así como una dirección de línea para especificar debajo de qué línea desea que se pegue el registro.

Por ejemplo:

:42put a

… debe poner el contenido del registro a , debajo de la línea 42 .

Sin un nombre de registro, Vim asumirá que desea pegar el registro sin nombre (o el registro + si modificó 'clipboard' ).
Y sin una dirección, Vim asumirá que desea pegarla debajo de la línea actual.


  1. Desde la línea de comando, puede cambiar el tipo de registro sin nombre con la función setreg() :

    :call setreg('"', '', 'al')

Aquí, setreg() debe anexar una cadena vacía en el registro sin nombre (gracias al a indicador pasado como tercer argumento) y cambiar su tipo a linewise (gracias a la l bandera).

Luego, desde el modo normal, debería poder pegar el registro, con el comando p normal, como si su tipo fuera linewise.


No está directamente vinculado a su problema, pero cuando copia algún texto, también entra en el registro 0 . Y si unnamedplus el valor unnamedplus a la opción 'clipboard' , también va al registro + .

Puede verificar cuál es el tipo de registro, usando la función getregtype() :

:echo getregtype('"')

Si devuelve una v minúscula, significa que el tipo es por caracteres.
Si devuelve una V mayúscula, significa que el tipo es linewise.
Si devuelve ^V{some number} , significa que el tipo es bloque y el ancho del bloque es {some number} .

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım