vim y portapapeles del sistema

9

Puedo capturar un archivo, copiar y pegar texto con el botón central o shift-insert.

¿Cómo puedo copiar texto en vim y pegarlo desde el portapapeles del sistema?

Grantbow
fuente
a veces uso sed -n5,10ppara imprimir líneas 5-10 para poder copiar y pegar más fácilmente sin que reaccione con el mouse.
Grantbow
en realidad desde adentro vim se ve el comando:!sed -n 5,10p %
grantbow
Gracias por todos los comentarios y respuestas. xclip es útil a veces, gracias @ sergiy-kolodyazhnyy. Cuando trabajo en diferentes máquinas, a veces no tengo control sobre qué vim está instalado, pero tener las instrucciones para verificar la respuesta de @muru es útil, gracias @ ashutosh-tripathy. Necesito usar los comandos vim register con más frecuencia para recordarlos cuando los necesito. Como mencioné en la pregunta anterior, si quiero hacerlo rápidamente y el archivo es pequeño, el comando dentro de vim parece:!cat %
grantbow

Respuestas:

12

Es necesario tener Vim con el clipboardy xtermclipboardcaracterísticas compilado. En Ubuntu, éstos sólo están disponibles con los paquetes de interfaz gráfica de usuario (vim vim-gnome, vim-gtk, vim-athena, etc.).

Una vez que instales uno de estos, puedes copiar (y pegar desde) los registros del portapapeles ( *y +). De esta publicación muy informativa sobre Vi y Vim :

Para los sistemas basados ​​en X11 (es decir, Linux y la mayoría de los sistemas similares a UNIX ) hay 2 portapapeles, que son independientes entre sí:

  • PRIMARIO: se trata de copiar al seleccionar y se puede pegar con el botón central del mouse.
  • CLIPBOARD: se copia con (generalmente) ^Cy se pega con ^V(es como MS Windows).

Vim tiene 2 registros especiales correspondientes a estos portapapeles:

  • *utiliza PRIMARIO; mnemónico: s tar es s elect (para copy-on- s elect)
  • +usa el CLIPBOARD; mnemónico: CTRL + C (para la combinación de teclas común)

Para copiar a un registro, debe preceder el comando de copia ( y) con "y el nombre del registro ( *por ejemplo). "*y, A continuación, el botón del medio para pegar, o "+yy ShiftInsertpegar.

muru
fuente
3

Una solución bastante interesante proviene de esta pregunta. Instale xclip, luego canalice la salida de un comando a xclip ( cat file | xclip -selection clipboardpor ejemplo) y luego péguelo en cualquier lugar (si está en la terminal, úselo Ctrl ShiftV ). Ahora, resulta que puedes acortar ese comando xclip -sel clip, lo que no es exactamente aparente al leer la página del manual o los ejemplos allí.

Sergiy Kolodyazhnyy
fuente
2
Otra salida es si usa screen o tmux, junto con este complemento . En cualquier caso, algo necesita ser instalado.
muru
¿Cuál es el portapapeles real que se usa en x server? No encontré nada /dev, pero el texto todavía está en alguna parte, ¿verdad?
Sergiy Kolodyazhnyy
Siempre supuse que estaría en la memoria. Sin embargo, esa parece una buena pregunta para Unix y Linux .
muru
3

Tuve un problema porque mi 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