2009-09-29 8 views
7

Cuando copio una de dos líneas texto a partir de (por ejemplo) un PDF abierto en Acrobat Reader en gvim usando CTRL-V, se inserta el texto por encima de la línea en gvim donde estaba posicionado, en lugar de en la posición donde mi cursor es. (escenario: quiero copiar un título del documento que se distribuye en dos líneas y pegarlo entre una etiqueta html en gvim).Pegar cadena de múltiples líneas en gVim en la posición del cursor

Si hago lo mismo con una sola línea de texto, el texto se pega correctamente en la posición del cursor.

¿Qué debo hacer para que también funcione con dos líneas de texto (por ejemplo, algo así como 'pegar sin formatear')?

Importante: la cadena que se va a pegar consta de dos líneas separadas por un retorno de carro (o algo similar).

Solución

realidad, hay dos soluciones válidas:

  • usando CTRL-R * para pegar en la posición de los cursores (y manteniendo el contenido del portapapeles multi-revestida)
  • hacer una reasignación del comando pegar para reemplazar todos los retornos de carro en la cadena de portapapeles

Respuesta

9

En primer lugar, parece CTRL-V se asigna a algo porque normalmente pegando en VIM no se hace uso de CTRL-V (CTRL-V es bloque visual).

Segundo, el comportamiento que está viendo es el comportamiento estándar de vi [m], si tira de una o más líneas enteras, pegar siempre dará como resultado una o más líneas por encima o por debajo de la línea actual.

No conozco ninguna forma integrada para lograr lo que estás tratando de hacer. Pero siempre se puede volver a asignar CTRL-V a algo que hace lo que quiere, es decir

:map <C-V> i<CR><Esc>"*P 

Después de que múltiples líneas de pegado será entre los personajes el cursor estaba en, pero esta reasignación probablemente no es lo que desea en otros casos.

EDITAR

Bueno, he encontrado otra manera.

Cuando está en modo de inserción, el tipo

CTRL-R * 

esto pegará el contenido de la memoria temporal de donde esté situado el cursor se encuentra en. (También puede usar esto para pegar el contenido de otros tampones)

+0

Ah, finalmente alguien que entendió mi problema :-) Veo lo que estás tratando de hacer, y de hecho es solo una solución a medio trabajo. Es extraño que vim no pueda manejar esto correctamente. ¿No hay una manera de eliminar retornos de carro en el búfer (portapapeles) antes de pegarlo en VIM? (BTW: el acceso directo no estándar ctrl-v no es el problema aquí) – Rabarberski

+1

Ah, su CTRL-R * ¡La actualización lo está haciendo por mí! – Rabarberski

1

Usar los accesos directos p y P (pegue después y antes del cursor, respectivamente). Agregue "* para especificar el contenido del registro del sistema (portapapeles de Windows, en su caso) o "+ (para UNIX).

Por lo tanto, se puede utilizar:

  • "*p pasta antes del cursor
  • "*P pasta después del cursor
  • "*y copia (área visual, o toma un sufijo diciendo Vim "qué" para copiar)
  • "*d corte (área visual, o con un postfijo)

y así sucesivamente.

+0

P y pastas P desde el búfer VIM, no desde el portapapeles de Windows, por lo que no funciona en este caso – Rabarberski

+0

Perdió esa parte, editada para agregar información. –

+0

Hmm, gracias por la sugerencia, pero eso todavía no funciona. Se pega por DEBAJO de la línea donde estoy posicionado, en lugar de en la posición del cursor – Rabarberski

1

Para pegar en gVim desde el portapapeles de Windows en la posición del cursor use

"+gP
No olvide la comilla doble.

+0

La pregunta no era cómo pegar, sino cómo pegar con el cursor dado que el contenido del portapapeles contiene dos líneas (separadas por un retorno de carro) – Rabarberski

+0

Creo Entendí tu pregunta. ¿Estás diciendo que probaste "+ gP y no funcionó? Lo hago por mí. –

+0

He actualizado mi respuesta para que responda directamente a tu pregunta. –

1
:set paste 

antes de pegar algo en el búfer

:set nopaste 

para restaurar la configuración de formato

+0

buen intento, pero no funciona para mí. 2 líneas aún se pegan POR ENCIMA de la línea actual – Rabarberski

2

Si desea despojar a las nuevas líneas de un registro antes de pegar de él, puede utilizar la expresión registro "=:

:map <C-v> "=substitute(@*, "\n", " ", "g")<CR>p 
+0

Muy buen consejo. Me tomó un poco de experiencia darme cuenta de que esto solo funciona cuando NO está en modo insertar. Pero puedo usar: imap para asignarlo allí también. ¡Gracias! – Rabarberski

+0

Pequeño actualización: He alterado tu solución usando P en lugar de p al final del comando de mapeo. Esto lo pega después del cursor, que se siente más natural para mí. – Rabarberski

Cuestiones relacionadas