Incolla in modalità inserimento?


385

È possibile incollare in modalità inserimento in Vim?

Risposte:


465

Mentre si è in modalità inserimento, premere CTRL-R {register}

Esempi:

  • CTRL-R * inserirà nel contenuto degli appunti
  • CTRL-R " (il registro senza nome) inserisce l'ultima cancellazione o yank.

Per trovare questo nel tipo di aiuto di vim :h i_ctrl-r


13
Sì, ho appreso solo recentemente di CTRL-R ed è estremamente utile.
Dan,

16
CTRL-R *funziona solo in GVIM o versioni compilate per interagire con x. Digita vim --versione cerca +xterm_clipboard. Se non lo possiedi, hai bisogno di una versione diversa di vim. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
Conrad.Dean

10
In realtà hai solo bisogno +clipboard, ma se +xterm_clipboardhai dovresti averlo comunque. Su alcuni sistemi operativi xterm_clipboardnon è applicabile.
Andrew Marshall,

1
Hmm, uso C-r + per incollare dagli appunti di sistema su Windows (usando GVim portatile)? Mai sentito parlare di * registrati.
kitsu.eb,

6
@ kitsu.eb Su X sistemi *registrati è pastable con il tasto centrale del mouse mentre +è il tradizionale copia / incolla. standards.freedesktop.org/clipboards-spec/clipboards-latest.txt
amc

235

Se non si desidera Vim manipolare la formattazione in incoming testo incollato, si potrebbe anche voler considerare l'utilizzo: :set paste. Ciò impedirà a Vim di ripetere la tabulazione del codice. Al termine dell'incollaggio, :set nopastetornerà al comportamento normale.

È anche possibile attivare / disattivare la modalità con un solo tasto, aggiungendo qualcosa di simile set pastetoggle=<F2>al tuo .vimrc. Maggiori dettagli sull'attivazione del rientro automatico sono disponibili qui .


47
:set nopastedisabiliterà la modalità incolla
James Snyder il

24
@JamesSnyder Un modo migliore è :set paste!probabilmente impostare incolla molto vicino nella cronologia dei comandi, quindi puoi semplicemente premere ':', quindi freccia in su e aggiungere un '!'.
Rafael Barbosa,

6
Solo curioso - cosa c'è di meglio o di diverso in :set paste! Grazie :)
Michael Durrant,

33
il !alla fine del comando in vimattiva e disattiva il comando. In questo modo non è necessario digitare :set nopasteinvece è possibile scorrere la cronologia verso l'alto ed eseguire di nuovo lo stesso comando ( :set paste!).
에이 바

3
@blockloop Dovresti abilitarlo mentre incolli e disabilitarlo subito dopo.
NieDzejkob,

125

No non direttamente. Quello che puoi fare è uscire rapidamente dalla modalità di inserimento per una singola operazione in modalità normale con Ctrl-Oe quindi incollare da lì che terminerà riportandoti in modalità di inserimento.

Combo chiave: Ctrl-O p

EDIT: interessante. Sembra che ci sia un modo come molte altre persone hanno elencato.


2
ctrl-r "non funziona per me (os x, vi in ​​un terminale). ctrl-o p ha funzionato.
Bob

4
Questo è il modo più semplice e veloce da ricordare.
pinpox,

Che dire esc + p?
sitilge,

2
Decisamente più veloce di esc + p + ie sicuramente più facile da digitare diCTRL-R + "
lucidbrot

In realtà, questo a volte si comporta diversamente da CTRL-R ". Ad esempio, sebbene le impostazioni di vimrc possano cambiare questa situazione, incollare qualcosa in una nuova riga usando CTRL-O pfa sparire il suo rientro.
noname,

30

In modalità inserimento, è possibile utilizzare Ctrl-R {register}, dove può essere registrato :

  • + per gli appunti,
  • * per gli Appunti X (ultimo testo selezionato in X),
  • " per il registro senza nome (ultima cancellazione o yank in Vim),
  • o un numero di altri (vedi :h registers).

Ctrl-R {register} inserisce il testo come se fosse stato digitato.

Ctrl-R Ctrl-O {register} inserisce il testo con il rientro originale.

Ctrl-R Ctrl-P {register} inserisce il testo e lo rientra automaticamente.

Ctrl-Opuò essere utilizzato per eseguire qualsiasi comando in modalità normale prima di tornare alla modalità di inserimento, quindi
Ctrl-O "+ppuò essere utilizzato, ad esempio.

Per ulteriori informazioni, consultare la documentazione con :h i_ctrl-r


4
Questa risposta sembra essere la più completa. È molto chiaro, e secondo me, il più utile. Risponde alla domanda del PO e poi in modo conciso.
Devvyn,

26

Puoi usarlo per incollare dagli appunti con Ctrlv:

set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>

E questo per trascinare la selezione visiva negli appunti con Ctrlc:

vnoremap <C-c> "+y

Se vuoi anche usare gli appunti di default per il classico vim yanking / incolling ( y/ p) in modalità normale, ecco un'opzione di configurazione che lo fa:

set clipboard=unnamedplus

Con queste configurazioni puoi ad esempio eseguire prima lo yank in modalità normale e poi incollarlo con Ctrlvin modalità insert. Inoltre, puoi incollare testo da diverse istanze vim e diverse applicazioni.

Un'altra opzione è:

set clipboard=unnamed

Quindi sarai in grado di selezionare qualcosa semplicemente trascinando il mouse nel tuo ambiente X e incollarlo in vim in seguito. Ma (per qualche ragione) non sarai in grado di strappare qualcosa ( y) in Vim e shiftinsertda qualche altra parte in seguito, il che è probabilmente abbastanza limitante.

Vim documenti a riguardo: http://vim.wikia.com/wiki/Accessing_the_system_clipboard

Per incollare dai registri personalizzati puoi seguire le altre risposte :). Questa risposta riguarda principalmente l'integrazione di Vim con gli Appunti di sistema.


Nota che per set clipboard=unnamedpluse set clipboard=unnamedper funzionare, devi usare gvim o vimx ( vim-X11): sono compilati con +xterm_clipboard. Puoi opzionalmente metterlo nel tuo .bashrcalias vimcon vimx:

if [ -e /usr/bin/vimx ]; then
    alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi

Puoi scoprire se il tuo VIM ha o meno +xterm_clipboardle informazioni fornite da vim --version.


7
Questo e 'esattamente quello che stavo cercando. È anche l'unica risposta ragionevole qui. Ecco come ci si aspetta che le cose funzionino. Qualcuno sa perché il comportamento predefinito di :set pastee bizantino <leader><leader> * yè persino desiderabile da remoto? Per non sembrare troppo impegnato, sono sinceramente curioso di sapere quale filosofia vim questo rifletta, o se è solo una sfortuna storica.
Eschilo,

La tua risposta mi ha permesso di usare Shift + Insert in Gvim anche con inoremap <S-Insert> <F12><C-r>+<F12>(io uso F12 come pastetoggle). Grazie.
sromero,

20

Se imposti Vim per utilizzare gli Appunti di sistema ( :set clipboard=unnamed), qualsiasi testo copiato in Vim può essere incollato usando Shift+ Insert. Shift+ Insertè semplicemente una combinazione di tasti incolla a livello di sistema operativo ( Ctrl+ Insertè la 'copia' corrispondente).


1
Non sapevo di S-Insert :)
BandGap

Funziona al contrario? Sarà pincollare il testo negli appunti?
Zaz,

Prima di utilizzare Shift + Insertper incollare il testo, dobbiamo essere nella modalità di inserimento.
jdhao,

18

Puoi anche utilizzare il pulsante centrale del mouse per incollare in modalità inserimento (solo Linux).


106
Di cosa parla questo mouse?
Jim Mitchener,

19
Di quali sistemi operativi non Linux parli?
Bruno Bronosky,

-1: questa risposta dipende fortemente dall'hardware e dalle impostazioni del terminale. Alla fine, i pulsanti del mouse inviano una stringa preimpostata al terminale e il terminale analizza quella stringa per eseguire un determinato comando. Il problema è che questo può variare notevolmente, a seconda delle impostazioni del terminale. Per migliorare questa risposta, forniscici almeno la versione del terminale, il sistema operativo e la versione e il modello del mouse che stai utilizzando.
melvynkim,

L'incollaggio del pulsante centrale del mouse è abbastanza comune in tutte le applicazioni Linux, non limitato dalle versioni del terminale o del SO.
lcltj,

Non funziona in Arch Linux + urxvt. Aggiunge solo una nuova linea.
zygimantus,

5

È possibile accedere alla -- INSERT (past) --modalità tramite:

  • Tastiera combinata: y p

o

  • :set pastee accedendo alla modalità di inserimento ( :set nopasteper disabilitare)

una volta in -- INSERT (past) --modalità, utilizza semplicemente la funzione incolla dei tuoi sistemi (ad es. CtrlShiftvsu Linux, Cmdvsu Mac OS).

Questa strategia è molto utile quando si utilizza vim su ssh.


4

Sì. In Windows Ctrl+ Ve Linux premendo entrambi i pulsanti del mouse quasi contemporaneamente.

In Windows penso che questa riga nel mio _vimrc probabilmente lo faccia:

source $VIMRUNTIME/mswin.vim

In Linux non ricordo come l'ho fatto. Sembra che probabilmente abbia eliminato alcune righe dal file .vimrc predefinito.


Posso votare più di una volta ?? Voglio incollare solo quando vengo da un'altra finestra, quindi sono sempre al mouse. Brillante!
Dave,

In Linux si incolla premendo il pulsante centrale del mouse. Se hai un mouse a due pulsanti e premi entrambi i pulsanti sinistro e destro, allora ha bisogno di "Emulate3Buttons" o simili per funzionare in questo modo.
Cougar,

0

Incolla in modalità Inserisci

Una mappa personalizzata sembra appropriata in questo caso. Questo è quello che uso per incollare oggetti strappati in modalità inserimento:

inoremap <Leader>p <ESC>pa

La mia Leaderchiave qui è \; questo significa che colpire \pin modalità inserimento incolla gli oggetti / le linee precedentemente strappati.


0

Aggiungi la mappa:

" ~/.vimrc
inoremap <c-p> <c-r>*

riavvia vim e quando premi Crtl+pin modalità insert, il testo copiato verrà incollato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.