Cómo copiar y pegar contenidos en el editor vi

165

Intenté usar Ctrl+ Vpara pegar contenidos en un documento de editor vi, pero Ctrl+ Vno se interpreta como una pasta.

Rpj
fuente
16
Solo una nota, la razón principal para usar Vi es porque Vim no está instalado. Si tienes instalado Vim, probablemente valga la pena usarlo. Vi no tiene realmente una ventaja además de que ya está presente en cada instalación de Unix. La mejor manera de aprender Vim en mi opinión es abrir su emulador de terminal (no desde dentro de Vim) y escribirlo lo vimtutorllevará a la velocidad a donde puede usarlo en aproximadamente 45 minutos.
Ben Mordecai
1
+1 @BenMordecai: ya estaba familiarizado con vi (desde antiguo), incluida su conveniente capacidad de sub-shell, pero necesitaba esa actualización. Gran poquito de tutoría. Lo atravesó como una brisa. Gracias.
Cbhihe

Respuestas:

192

Primero, asegúrese de estar en modo de edición (presione i). Luego puede pegar con Ctrl+ Shift+ V, si está en un emulador de terminal como gnome-terminal(o seleccione "Pegar" en el menú contextual).

También puede escribir :set pastevim antes de pegar para desactivar la sangría automática, etc. Luego, :set nopastedespués de pegar el contenido.

Consulte también esta pregunta en stackoverflow.com para obtener más información.

Si desea copiar / pegar líneas vim(en lugar de pegar el contenido del portapapeles), querrá revisar el comando yank . Aquí hay una hoja de trucos que podría ayudar.

Atila O.
fuente
1
Creo que si tienes el cursor del mouse activado, no puedes pegar usando Ctrl + Shift + V.
Alvin Wong
14
Solo una nota, Idistingue entre mayúsculas y minúsculas. La letra minúscula ies la forma normal de ingresar al modo de inserción. Capital Illeva el cursor al comienzo de la línea y luego lo introduce en el modo de inserción.
Ben Mordecai
64

Vi (y Vim) funciona de manera muy diferente en comparación con un editor de texto normal como Gedit. También tiene una curva de aprendizaje bastante empinada. Si desea aprender algunos comandos básicos, comience con este tutorial interactivo .

Sin embargo, para responder a su pregunta. Se puede acceder al contenido del portapapeles del sistema a través del registro más. Entonces, para pegar algo desde el portapapeles del sistema, puede, desde el modo Normal, presionar: "+p(No al mismo tiempo, sino uno tras otro).

Daniel Jonsson
fuente
3
Esto es algo que no sabía hasta ahora. Además, +1 para vincular otro impresionante tutorial de vim.
Atila O.
19
Hablando de curvas de aprendizaje para editores, existen las "curvas de aprendizaje clásicas para algunos editores comunes", blog.thilelli.net/public/store/attached/curves.jpg .
hlovdal
En GNOME Terminal, los atajos para copiar y pegar son Ctrl-Shift-C y Ctrl-Shift-V, respectivamente.
Flimm
1
He tratado de presionar a su vez <kbd> "</kbd>, <kbd> + </kbd> y <kbd> p </kbd>, también <kbd>" </kbd> y <kbd> p < / kbd> y no ha pasado nada. ¿Qué he hecho mal? Yo uso vinovim
user907860
1
Esa es la respuesta correcta. Usando eg. Ctrl-Shift-v solo funcionará con los contenidos más simples (los saltos de línea y las sangrías pueden estar realmente mal si estás en la terminal y olvidaste usar set :paste).
rsenna
29
  1. Si desea copiar y pegar contenidos dentro del mismo archivo , use yanky paste.

  2. Si desea copiar el contenido de pegado en los terminales , abra el primer archivo, tirando del texto que desea, luego abra su segundo archivo dentro de vim (por ejemplo :tabnew /path/to/second/file) y presione ppara pegarlo.

  3. Si desea copiar y pegar contenidos de vim a un programa externo , debe acceder al portapapeles del sistema. Supongo que usas Ubuntu. La versión GUI de vim siempre tiene soporte para portapapeles, sin embargo, si desea usar Vim desde un terminal, deberá verificar el soporte para portapapeles X11.

    Desde la consola, escriba:

    $ vim --version | grep xterm
    

    Si encuentra -xterm_clipboard , tiene dos opciones:

    1) Compile vim usted mismo, con la bandera xterm_clipboard en

    2) Desinstale vim, instale gvim (vim-gtk o vim-gnome) en su lugar. Puede apegarse a no-gui vim llamando a vim desde la terminal, de la misma manera que lo hizo antes. Esta vez, cuando verificas, deberías encontrar + xterm_clipborad .

    Ahora, cuando tira algo de texto en el registro + dentro de su editor vim (por ejemplo, "+ aa), también se copia en el portapapeles del sistema que puede recuperar de su programa externo como editor gedit, usando Ctrl+ V.

  4. Si desea copiar y pegar contenidos de un programa externo en vim , primero copie el texto en el portapapeles del sistema a través de Ctrl+ C, luego en el modo de inserción del editor de vim , haga clic en el botón central del mouse (generalmente la rueda) o presione Ctrl+ Shift+ Vpara pegar.

    Estas son 4 condiciones básicas de copiar y pegar relacionadas con vim. Espero que esto ayude.

47dev47null
fuente
¿Cuál es el punto de: tabnew / ruta / a / segundo / archivo? Puede lograr exactamente lo mismo tirando / copiando / cortando en el primer archivo, abriendo el segundo archivo con: vi / path / to / second / file y pegando (p / P) en él. Al menos en mi caso ... ¿O es porque tengo habilitada la función + xterm_clipboard vim? ¿O hay algo más para tabnew que solo eso?
Cbhihe
1
En Ubuntu vim-gtktiene xterm_clipboardsoporte y en Fedora lo xvimtiene.
icc97
18

Siempre uso Shift+ Insertcuando quiero pegar texto en el terminal, funciona en todos los programas de terminal.

(Esa es también la razón por la que nunca obtengo una computadora portátil donde no se puede presionar Insertsin presionar una tecla secundaria)

Magnus Jonsson
fuente
2
Vi/ Vim! = terminal;)
0xC0000022L
1
ok ok, pero aún funciona :)
Magnus Jonsson
1 para este .. ¿Qué se usa para realizar por ejemplo Ctrl+A, Ctrl+Ctambién?
Arup Rakshit
Si uso un terminal dentro de un DE, generalmente solo selecciono el texto con el mouse y lo copio con Ctrl + Shift + C.
Magnus Jonsson
Shift + Insert también funciona en gvim. (Estoy ejecutando Ubuntu 13.10, si eso hace alguna diferencia.)
eksortso
10

Use el botón central del mouse para insertar texto que haya resaltado en otro lugar.

Es útil cuando no tiene acceso al portapapeles de su sistema (por ejemplo, en una sesión SSH remota).

Debe estar en modo de edición / inserción para Vim.

will-ob
fuente
6

Una vez que ingrese vi, presione ipara ingresar al modo de inserción, haga clic derecho en la terminal, haga clic en pegar.

GC 13
fuente
Pensé que era minúscula i. ¿Qué hace mayúscula I?
Flimm
@Flimm que ya se explicó en un comentario de Ben Mordecai sobre otra respuesta.
sierrasdetandil
He editado la respuesta en minúsculas i. Las mayúsculas Imueven el cursor al comienzo de la línea antes de ingresar al modo de inserción, que no es necesario aquí.
Flimm
6

Instrucciones detalladas para copiar / pegar líneas de texto en vi usando yankyput

(use lo siguiente en el modo de comando de vi)

Copiar (YANK)

Para copiar una línea en vi:

  • En el modo de comando, mueva el cursor a la línea que debe copiarse y escriba yyo escribaY

Para copiar 2 líneas en vi:

  • En el modo de comando, mueva el cursor a la primera línea que debe copiarse y escriba 2yyo escriba2Y

(Del mismo modo, se puede copiar cualquier número de líneas)

Para copiar todas las líneas desde la ubicación actual hasta el final del archivo:

  • En el modo de comando, mueva el cursor a la primera línea que debe copiarse y escriba yG

Para copiar todo el texto de la ubicación actual al final de la palabra actual:

  • En el modo de comando, mueva el cursor a la ubicación desde donde se debe copiar el texto y escriba yw

Para copiar todo el texto de la ubicación actual al final de la línea:

  • En el modo de comando, mueva el cursor a la ubicación desde donde se debe copiar el texto y escriba y$

Pegar (PONER)

Para pegar texto en el portapapeles, después de la ubicación del cursor:

  • En el modo de comando, escriba p

Para pegar texto en el portapapeles, antes de la ubicación del cursor:

  • En el modo de comando, escriba P
Slayernoah
fuente
1

Tuve un problema porque mi instalación de Vim no era compatible con el portapapeles :

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

Instalé vim-gnome (que admite el portapapeles) y luego verifiqué nuevamente:

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

Ahora puedo copiar y pegar usando "+ y y" + p respectivamente.

Ashutosh Tripathy
fuente
Esto solucionó mi problema!
astrojuanlu
1

Con Vim 8+ en Linux o Mac, ahora puede simplemente usar la pasta nativa del sistema operativo ( ctrl+shift+Ven Linux, cmd+Ven Mac). No presione ipara el Modo Insertar.

Pegará el contenido del portapapeles de su sistema operativo, conservando los espacios y las pestañas sin agregar autoindenting. Es equivalente a la antigua :set paste, i, ctrl+shift+V, esc, :set nopastemétodo.

Ya ni siquiera necesita instalar las funciones +clipboardo +xterm_clipboardvim. Esta característica se llama "pasta entre corchetes". Para obtener más detalles, consulte https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763

Wisbucky
fuente
Esa es la respuesta que estoy buscando. Dado que Vim no es el predeterminado en las distribuciones gnu / linux, debe instalarse incluso en ubuntu. Además, los botones arriba y abajo de Vi no funcionan en ubuntu y no resaltan.
itsnotmyrealname
0

Si eres root : Ctrl+ Shift+V

Si no es root : haga clic en el centro del mouse.

Vista elíptica
fuente
0

Solo quería señalar que usando Vim a través de Git Bash en Windows, puede usar po hacer clic con el botón central del mouse sin estar en modo de inserción. Usando Vim a través de PuTTY , puede hacer clic derecho. Y destacando hace la copia.

He notado esto porque llegué aquí sin ver que esto es SE para Ubuntu.

Otros comandos útiles:

  • yy(# de líneas) - tirar (copiar)
  • dd(# de líneas) - eliminar
  • p - pegar línea debajo de la línea actual
  • Shift+ p- pegar línea sobre la línea actual
  • u - deshacer
  • r rehacer
  • i - modo de inserción
  • v - modo visual
Tyler Christian
fuente
Eso no funcionó para mí en Windows Git Bash. ¿Qué consola estás usando, mintty o windows cmd?
wisbucky
Creo que fue mezquino.
Tyler Christian
0

Puede usar Ctrl+ Shift+ Vpara pegar en la versión de terminal vim, pero para la versión de GUI vim Neovim-Qt, pegar texto desde el portapapeles del sistema con Ctrl+ Shift+ Vsimplemente no funcionará. Tienes que acceder al portapapeles "+o "*en el editor vim.

Agregar nuevas combinaciones de teclas .vimrcserá simplemente los comandos copiar / pegar:

" 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)
Yossarian42
fuente