È possibile incollare in modalità inserimento in Vim?
È possibile incollare in modalità inserimento in Vim?
Risposte:
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
CTRL-R *
funziona solo in GVIM o versioni compilate per interagire con x. Digita vim --version
e cerca +xterm_clipboard
. Se non lo possiedi, hai bisogno di una versione diversa di vim. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
+clipboard
, ma se +xterm_clipboard
hai dovresti averlo comunque. Su alcuni sistemi operativi xterm_clipboard
non è applicabile.
*
registrati è pastable con il tasto centrale del mouse mentre +
è il tradizionale copia / incolla. standards.freedesktop.org/clipboards-spec/clipboards-latest.txt
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 nopaste
tornerà 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 .
:set nopaste
disabiliterà la modalità incolla
:set paste!
probabilmente impostare incolla molto vicino nella cronologia dei comandi, quindi puoi semplicemente premere ':', quindi freccia in su e aggiungere un '!'.
:set paste!
Grazie :)
!
alla fine del comando in vim
attiva e disattiva il comando. In questo modo non è necessario digitare :set nopaste
invece è possibile scorrere la cronologia verso l'alto ed eseguire di nuovo lo stesso comando ( :set paste!
).
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.
esc + p
?
esc + p + i
e sicuramente più facile da digitare diCTRL-R + "
CTRL-R "
. Ad esempio, sebbene le impostazioni di vimrc possano cambiare questa situazione, incollare qualcosa in una nuova riga usando CTRL-O p
fa sparire il suo rientro.
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),: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-O
può essere utilizzato per eseguire qualsiasi comando in modalità normale prima di tornare alla modalità di inserimento, quindi
Ctrl-O "+p
può essere utilizzato, ad esempio.
Per ulteriori informazioni, consultare la documentazione con :h i_ctrl-r
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=unnamedplus
e set clipboard=unnamed
per funzionare, devi usare gvim o vimx ( vim-X11
): sono compilati con +xterm_clipboard
. Puoi opzionalmente metterlo nel tuo .bashrc
alias vim
con 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_clipboard
le informazioni fornite da vim --version
.
:set paste
e 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.
inoremap <S-Insert> <F12><C-r>+<F12>
(io uso F12 come pastetoggle). Grazie.
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).
p
incollare il testo negli appunti?
Shift + Insert
per incollare il testo, dobbiamo essere nella modalità di inserimento.
Puoi anche utilizzare il pulsante centrale del mouse per incollare in modalità inserimento (solo Linux).
È possibile accedere alla -- INSERT (past) --
modalità tramite:
o
:set paste
e accedendo alla modalità di inserimento ( :set nopaste
per 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.
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.
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 Leader
chiave qui è \
; questo significa che colpire \p
in modalità inserimento incolla gli oggetti / le linee precedentemente strappati.
Aggiungi la mappa:
" ~/.vimrc
inoremap <c-p> <c-r>*
riavvia vim e quando premi Crtl+p
in modalità insert, il testo copiato verrà incollato