2009-09-29 12 views
7

Quando copio due righe testo da (ad esempio) un PDF aperto in Acrobat Reader in gvim utilizzando CTRL-V, il testo viene inserito sopra la linea in gvim dove sono stato posizionato, invece di nella posizione in cui il mio cursore è. (scenario: voglio copiare un titolo di documento che si sviluppa su due righe e incollarlo tra un tag html in gvim).incolla stringa multi linea in GVIM alla posizione del cursore

Se si esegue lo stesso con una riga singola di testo, il testo viene incollato correttamente nella posizione del cursore.

Cosa devo fare per farlo funzionare anche con due righe di testo (ad esempio qualcosa come "incolla senza formattazione")?

Importante: la stringa da incollare consiste di due righe separate da un ritorno a capo (o qualcosa di simile)!

Soluzione

In realtà ci sono due soluzioni valide:

  • utilizzando CTRL-R * per incollare nella posizione cursori (e mantenendo il contenuto degli appunti multi-allineati)
  • fare un rimappatura del comando incolla per sostituire tutti i ritorni a capo nella stringa degli appunti

risposta

9

Prima di tutto sembra CTRL-V è associata a qualcosa perché normalmente incollando in Vim non è fatto usando CTRL-V (CTRL-V è un blocco visivo).

In secondo luogo, il comportamento che si sta osservando è il comportamento di vi [m] standard, se si esegue uno o più intere righe, l'incolla restituirà sempre una o più righe sopra o sotto la riga corrente.

Non conosco alcun modo incorporato per ottenere ciò che si sta tentando di fare. Ma si può sempre rimappare CTRL-V per qualcosa che non fai quello che vuoi, vale a dire

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

Dopo che le linee più incollando sarà tra i personaggi il cursore era in, ma questo rimappatura probabilmente non è ciò che si desidera in altri casi.

EDIT

OK, ho trovato un altro modo.

Quando in modalità di inserimento, tipo

CTRL-R * 

questo inserirà il contenuto del buffer appunti alla posizione del cursore si trova. (È inoltre possibile utilizzare questo per incollare il contenuto di altri buffer)

+0

Ah, finalmente qualcuno che ha capito il mio problema :-) Vedo quello che stai cercando di fare, ed è in effetti solo una soluzione a metà lavoro. Strano che Vim non può gestire questo Non esiste un modo per rimuovere i ritorni a capo nel buffer (appunti) prima di incollarlo in VIM? (BTW: il collegamento ctrl-v non standard non è il problema qui) – Rabarberski

+1

Ah, il tuo CTRL-R * update lo sta facendo per me! – Rabarberski

1

Utilizzare le scorciatoie p e P (incolla prima e dopo il cursore, rispettivamente). Aggiungi "* per specificare il contenuto del registro di sistema (Appunti di Windows, nel tuo caso) o "+ (per UNIX).

Quindi, è possibile utilizzare:

  • "*p pasta prima del cursore
  • "*P pasta dopo il cursore
  • "*y copia (area visiva, o prende un suffisso dice Vim "cosa" per copiare)
  • "*d taglio (area di visualizzazione o con un suffisso )

e così via.

+0

p e paste di P dal buffer VIM, non dagli Appunti di Windows, quindi non funziona in questo caso – Rabarberski

+0

Mancata quella parte, modificata per aggiungere informazioni. –

+0

Hmm, grazie per il suggerimento, ma ancora non funziona. Viene incollato sopra la linea in cui sono posizionato, invece che nella posizione dei cursori – Rabarberski

1

Per incollare in gVim dagli appunti di Windows nella posizione del cursore utilizzare

"+gP
Non dimenticare il doppio preventivo.

+0

La domanda non era come incollare, ma come incollare il cursore dato che il contenuto degli appunti contiene due righe (separate da un ritorno a capo) – Rabarberski

+0

Credo Ho capito la tua domanda Stai dicendo che hai provato "+ gP e non ha funzionato? Lo fa per me." –

+0

Ho aggiornato la mia risposta in modo che risponda direttamente alla tua domanda. –

1
:set paste 

prima di incollare qualcosa nel buffer

:set nopaste 

per ripristinare le impostazioni di formattazione

+0

bel tentativo, ma non funziona per me. 2 righe ancora incollate sopra la riga corrente – Rabarberski

2

Se si vuole mettere a nudo ritorni a capo da un registro prima di incollarlo da esso, è possibile utilizzare il registro di espressione "=:

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

Un suggerimento molto carino Ci sono voluti alcuni esperimenti per realizzare questo funziona solo quando NON è in modalità inserimento, ma posso usare: imap per mapparlo anche lì. Grazie! – Rabarberski

+0

Piccolo aggiornamento: ho modificato la tua soluzione usando P invece di p alla fine del comando di mappatura. Questo lo incolla dopo il cursore, che mi sembra più naturale. – Rabarberski

Problemi correlati