Come copiare i contenuti incollati nell'editor vi


165

Ho provato a usare Ctrl+ Vper incollare i contenuti in un documento dell'editor vi, ma Ctrl+ Vnon viene interpretato come un incolla.


16
Solo una nota, il motivo principale per usare Vi è perché Vim non è installato. Se hai installato Vim, probabilmente vale la pena usarlo invece. Vi non ha davvero alcun vantaggio oltre a quello che è già presente su ogni installazione Unix. Il modo migliore per imparare Vim secondo me è quello di aprire il tuo emulatore di terminale (non da Vim) e digitare vimtutorTi consentirà di arrivare a dove è utilizzabile in circa 45 minuti.
Ben Mordecai,

1
+1 @BenMordecai - Avevo già familiarità con vi (dal vecchio), compresa la sua comoda funzionalità di sub-shell, ma avevo bisogno di un aggiornamento. Un bel po 'di tutoraggio. Ci siamo passati come una brezza. Grazie.
Cbhihe,

Risposte:


192

Innanzitutto, assicurati di essere in modalità modifica (premi i). Quindi puoi incollare con Ctrl+ Shift+ V, se ti trovi in ​​un emulatore di terminale simile gnome-terminal(o seleziona "Incolla" dal menu di scelta rapida).

Puoi anche digitare :set pastevim prima di incollarlo per disabilitare il rientro automatico, ecc. Dopo :set nopasteaver incollato il contenuto.

Controlla anche questa domanda su stackoverflow.com per ulteriori informazioni.

Se vuoi copiare / incollare le linee vim(invece di incollare il contenuto degli appunti), ti consigliamo di dare un'occhiata al comando yank . Ecco un cheat sheet che potrebbe aiutare.


1
Penso che se hai il cursore del mouse acceso, non puoi incollare usando Ctrl + Maiusc + V.
Alvin Wong,

14
Solo una nota, Iè sensibile al maiuscolo / minuscolo. La minuscola iè il modo normale di accedere alla modalità di inserimento. La maiuscola Iporta il cursore all'inizio della riga e quindi entra nella modalità di inserimento.
Ben Mordecai,

64

Vi (e Vim) funzionano in modo molto diverso rispetto a un normale editor di testo come Gedit. Ha anche una curva di apprendimento piuttosto ripida. Se vuoi imparare alcuni comandi di base, inizia con questo tutorial interattivo .

Tuttavia, per rispondere alla tua domanda. È possibile accedere al contenuto degli Appunti di sistema tramite il registro più. Quindi, per incollare qualcosa dagli appunti di sistema, puoi, dalla modalità Normale, premere: "+p(Non contemporaneamente, ma uno dopo l'altro).


3
Questo è qualcosa che non sapevo fino ad ora. Inoltre, +1 per collegare ancora un altro fantastico tutorial di VIM.
Attila O.

19
Parlando di curve di apprendimento per i redattori, c'è la "curva di apprendimento classica per alcuni redattori comuni", blog.thilelli.net/public/store/attached/curves.jpg .
hlovdal

Nel Terminale GNOME, le scorciatoie per copia e incolla sono rispettivamente Ctrl-Maiusc-C e Ctrl-Maiusc-V.
Flimm,

1
Ho provato a premere a sua volta <kbd> "</kbd>, <kbd> + </kbd> e <kbd> p </kbd>, anche <kbd>" </kbd> e <kbd> p < / kbd> e non è successo nulla. Cosa ho fatto di sbagliato? Io vinon usovim
user907860 il

1
Questa è la risposta giusta Usando ad es. Ctrl-Shift-v funzionerà solo con i contenuti più semplici (le interruzioni di riga e i rientri possono sbagliarsi se sei nel terminale e ti sei dimenticato di usare set :paste).
rsenna,

29
  1. Se si desidera copiare i contenuti incollati all'interno dello stesso file , utilizzare yanke paste.

  2. Se vuoi copiare il contenuto incollato tra i terminali , apri il primo file, strappando il testo desiderato, quindi apri il tuo secondo file in vim (ad es. :tabnew /path/to/second/file) E premi pper incollarlo.

  3. Se si desidera copiare il contenuto incolla da VIM in un programma esterno , è necessario accedere agli Appunti di sistema. Presumo che tu usi Ubuntu. La versione GUI di vim ha sempre il supporto degli appunti, tuttavia, se ti piace usare Vim da un terminale, dovrai controllare il supporto degli appunti X11.

    Dalla console, digitare:

    $ vim --version | grep xterm
    

    Se trovi -xterm_clipboard , hai due opzioni:

    1) Compila vim te stesso, con il flag xterm_clipboard acceso

    2) Disinstallare vim, installare invece gvim (vim-gtk o vim-gnome). Puoi attenerti a non-gui vim chiamando vim dal terminale, come hai fatto prima. Questa volta quando controlli dovresti trovare + xterm_clipborad .

    Ora, quando si estrae del testo nel registro + all'interno dell'editor vim (ad es. "+ Yy), viene anche copiato negli appunti di sistema che è possibile recuperare dal programma esterno come l'editor gedit, utilizzando Ctrl+ V.

  4. Se vuoi copiare i contenuti incollati da un programma esterno in vim , prima copia il testo negli appunti di sistema tramite Ctrl+ C, quindi in modalità di inserimento dell'editor vim , fai clic sul pulsante centrale del mouse (di solito la rotellina) o premi Ctrl+ Shift+ Vper incollare.

    Queste sono 4 condizioni di copia e incolla di base relative a vim. Spero che questo possa essere d'aiuto.


Qual è il punto di: tabnew / path / to / second / file? Puoi ottenere esattamente la stessa cosa strappando / copiando / tagliando il primo file, aprendo il secondo file con: vi / path / to / second / file e incollando (p / P) in esso. Almeno nel mio caso ... O è perché ho la funzione vim + xterm_clipboard abilitata? O c'è di più da sapere oltre a quello?
Cbhihe,

1
Su Ubuntu vim-gtkha il xterm_clipboardsupporto e su Fedora ce l' xvimha.
icc97,

18

Uso sempre Shift+ Insertquando voglio incollare il testo nel terminale, funziona in tutti i programmi del terminale.

(Questo è anche il motivo per cui non ho mai un laptop in cui non è possibile premere Insertsenza premere un tasto secondario)


2
Vi/ Vim! = terminal;)
0xC0000022L

1
ok ok, ma funziona ancora :)
Magnus Jonsson,

+1 per questo .. Che cosa si usa per eseguire ad esempio Ctrl+A, Ctrl+Canche?
Arup Rakshit,

Se uso un terminale all'interno di un DE, di solito seleziono semplicemente il testo con il mouse e lo copio con Ctrl + Maiusc + C.
Magnus Jonsson,

Shift + Insert funziona anche in gvim. (Sto eseguendo Ubuntu 13.10, se questo fa la differenza.)
eksortso

10

Usa il pulsante centrale del mouse per inserire il testo che hai evidenziato altrove.

È utile quando non si ha accesso agli Appunti di sistema (ad esempio, in una sessione SSH remota).

Deve essere in modalità modifica / inserisci per Vim.


6

Dopo aver inserito vi, premere iper accedere alla modalità di inserimento, fare clic con il tasto destro del mouse sul terminale, fare clic su Incolla.


Pensavo fosse in minuscolo i. Cosa fa in maiuscolo I?
Flimm,

@Flimm che è stato già spiegato in un commento di Ben Mordecai su un'altra risposta.
sierrasdetandil,

Ho modificato la risposta in minuscolo i. Le maiuscole Ispostano il cursore all'inizio della riga prima di accedere alla modalità di inserimento, che qui non è necessaria.
Flimm,

6

Istruzioni dettagliate per copiare / incollare righe di testo in vi usando yankeput

(utilizzare quanto segue nella modalità di comando di vi)

Copia (YANK)

Per copiare una riga in vi:

  • Nel modo comando, sposta il cursore sulla riga che deve essere copiata e digita yyo digitaY

Per copiare 2 righe in vi:

  • Nel modo comando, sposta il cursore sulla prima riga che deve essere copiata e digita 2yyo digita2Y

(allo stesso modo, è possibile copiare qualsiasi numero di righe)

Per copiare tutte le righe dalla posizione corrente alla fine del file:

  • Nel modo comando, sposta il cursore sulla prima riga che deve essere copiata e digita yG

Per copiare tutto il testo dalla posizione corrente alla fine della parola corrente:

  • Nel modo comando, sposta il cursore nella posizione in cui il testo deve essere copiato e digitato yw

Per copiare tutto il testo dalla posizione corrente alla fine della riga:

  • Nel modo comando, sposta il cursore nella posizione in cui il testo deve essere copiato e digitato y$

Incolla (PUT)

Per incollare il testo negli Appunti - dopo la posizione del cursore:

  • Nella modalità di comando, digitare p

Per incollare il testo negli Appunti - prima della posizione del cursore:

  • Nella modalità di comando, digitare P

1

Ho avuto un problema, perché la mia installazione di Vim non supportava gli Appunti :

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Ho installato vim-gnome (che supporta gli appunti) e poi ho controllato di nuovo:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Ora sono in grado di copiare e incollare usando rispettivamente "+ y e" + p.


Questo ha risolto il mio problema!
astrojuanlu,

1

Con Vim 8+ su Linux o Mac, ora puoi semplicemente utilizzare la copia nativa del sistema operativo ( ctrl+shift+Vsu Linux, cmd+Vsu Mac). Non premere iper la modalità di inserimento.

Incollerà il contenuto degli appunti del sistema operativo, preservando gli spazi e le schede senza aggiungere autoindenting. E 'corrisponde alla vecchia :set paste, i, ctrl+shift+V, esc, :set nopastemetodo.

Non hai nemmeno più bisogno delle funzionalità di +clipboardo +xterm_clipboardvim installate. Questa funzione è chiamata "incolla tra parentesi". Per maggiori dettagli, consultare https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763


Questa è la risposta che sto cercando. Poiché Vim non è predefinito nelle distribuzioni gnu / linux, deve essere installato anche in Ubuntu. Inoltre, i pulsanti su e giù di Vi non funzionano su Ubuntu e non evidenziano.
itsnotmyrealname

0

Se sei root : Ctrl+ Shift+V

Se non sei root : fai clic con il pulsante centrale del mouse.


0

Volevo solo notare che usando Vim tramite Git Bash su Windows, puoi semplicemente usare po fare clic con il tasto centrale del mouse senza essere in modalità inserimento. Usando Vim tramite PuTTY , puoi semplicemente fare clic con il tasto destro. E l'evidenziazione fa la copia.

L'ho notato perché sono arrivato qui non vedendo che questo è SE per Ubuntu.

Altri comandi utili:

  • yy(N. di righe) - yank (copia)
  • dd(N. di righe) - elimina
  • p - incolla la riga sotto la riga corrente
  • Shift+ p- incolla la riga sopra la riga corrente
  • u - disfare
  • r - ripeti
  • i - modalità inserimento
  • v - modalità visiva

Non ha funzionato per me su Windows Git Bash. Quale console stai usando, mintty o windows cmd?
Wisbucky

Credo che fosse perfetto.
Tyler Christian,

0

Puoi usare Ctrl+ Shift+ Vper incollare in vim versione terminale, ma per la versione GUI vim come Neovim-Qt, incollare il testo dagli appunti di sistema con Ctrl+ Shift+ Vsemplicemente non funzionerà. Devi accedere agli appunti "+o "*nell'editor vim.

Aggiungendo un nuovo keybinding .vimrcverranno semplicemente i comandi copia / incolla:

" paste from system clipboard, align indentation with surroundings
noremap <Leader>p "*]p:set nopaste<CR>
" copy a sentence into system clipboard
noremap <Leader>y "+y)
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.