gvim - ¿Cómo copiar al portapapeles en Vim?
vim enable clipboard (26)
¿Es posible copiar al portapapeles directamente desde Vim? yy
solo copia cosas al buffer interno de Vim. Quiero copiar al portapapeles del sistema operativo. ¿Hay algún comando de este tipo en Vim o solo puedes tirar cosas dentro de Vim?
- Ponga
set clipboard=unnamed
en suvimrc
. - Seleccione lo que desea copiar en el modo
Visual
(Presione v para ingresar). - Volver al modo
Normal
(Presione escape [esc]), presione y para copiar. - Si desea pegar algo del portapapeles del sistema operativo, presione p / P en el modo Vim
Normal
.
@Jacob Dalton ha mencionado esto en un comentario, pero nadie parece haber mencionado en una respuesta que vim tiene que compilarse con el soporte del portapapeles para que cualquiera de las sugerencias mencionadas aquí funcione. El mío no estaba configurado de esa manera en Mac OS X por defecto y tuve que reconstruir vim. Use este comando para averiguar si lo tiene o no vim --version | grep ''clipboard''
vim --version | grep ''clipboard''
. +clipboard
significa que eres bueno y las sugerencias aquí te servirán, mientras que -clipboard
significa que tienes que recompilar y reconstruir vim.
El *
registro hará esto. En Windows, +
y *
son equivalentes. En Unix hay una diferencia sutil entre +
y *
:
Bajo Windows, los registros * y + son equivalentes. Para los sistemas X11, sin embargo, difieren. Para los sistemas X11, * es la selección, y + es el búfer de corte (como el portapapeles). http://vim.wikia.com/wiki/Accessing_the_system_clipboard
*
es probablemente lo que más deseas el tiempo, así que lo uso *
porque funciona como lo espero en ambos entornos.
En las distribuciones de Linux, por alguna razón, primero debe instalar vim-gtk para obtener la funcionalidad del portapapeles.
Y para aquellos confundidos acerca de cómo usar los registros al tirar o poner, simplemente escriba "
luego el nombre del registro. Así que para copiar algo en el registro del portapapeles, escriba "*y
y luego escriba "*p
En Mac OSX
copie la parte seleccionada: seleccione visualmente el texto (escriba
v
oV
en modo normal) y escriba:w !pbcopy
Copie el archivo completo
:%w !pbcopy
pegar desde el portapapeles
:r !pbpaste
En la mayoría de las distribuciones de Linux , puede sustituir:
-
pbcopy
arriba conxclip -i -sel c
oxsel -i -b
-
pbpaste
utilizandoxclip -o -sel -c
oxsel -o -b
- Nota: En caso de que ninguna de estas herramientas (xsel
yxclip
) esté preinstalada en su distro, probablemente las pueda encontrar en los repositorios.
En caso de que no quiera usar ninguna interfaz gráfica para vim y prefiera quedarse con el emulador de terminal, puede haber un enfoque mucho más simple para este problema. En lugar de usar yank o algo como esto, primero eche un vistazo a la documentación del terminal que usa. He estado luchando con el mismo problema (tratando de usar + portapapeles y xclip y así sucesivamente) y al final resultó que en mi emulador de terminal es suficiente con presionar Mayús y seleccionar cualquier texto que quieras copiar. Eso es. Bastante simple y sin necesidad de meterse con la configuración. (Yo uso urxvt por cierto).
En su archivo vimrc puede especificar utilizar automáticamente el portapapeles del sistema para copiar y pegar.
En el conjunto de Windows:
set clipboard=unnamed
En el conjunto de Linux (vim 7.3.74+):
set clipboard=unnamedplus
NOTA: Es posible que necesite usar una versión actualizada de Vim para que funcionen.
Escribí una línea simple en mi .vimrc para hacer funcionar la copia. Espero que esto ayude a alguien. Mi vim no está instalado con el soporte del Portapapeles, desafortunadamente, por lo que ninguna de estas sugerencias funcionó para mí. Básicamente, pega esta línea en tu .vimrc:
map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
Si desea leer detalles sobre lo que hace esto, puede leer sobre esto en mi blog
La solución para mí fue instalar vim adicional que incluye la opción del portapapeles:
sudo apt-get install vim-gnome
Nada de arriba me funcionó en mi computadora portátil con Windows
Ctrl + C estaba bien para copiar ... ¡pero necesitaba Shift + Insertar para pegar!
(Una buena razón para obtener siempre una computadora portátil donde siempre se puede acceder a Insertar sin presionar una tecla secundaria)
No pude copiar al sistema de mi portapapeles porque tenía esto en mi archivo ~ / .vimrc:
if has(''mouse'')
set mouse=a
endif
Pero si agrega esta línea a continuación, le permitirá simplemente presionar Ctrl + c para obtener lo que haya seleccionado en su portapapeles.
vmap <C-c> "+y
Discusión original y más detalles: copie texto fuera de vim con el mouse configurado = a habilitado
Para algunos teclados internacionales, es posible que deba presionar " + Espacio para obtener "
.
Así que en esos casos tendrías que presionar " Espacio + y o " Espacio * y
Puedes encontrar las respuestas aquí Arch Wiki
Para Linux: primero debe habilitar el Portapapeles en su versión vim instalando gvim
.
Luego tienes que poner esta línea en tu archivo .vimrc
.
set clipboard=unnamedplus
Resumiendo y haciéndolo más fácil para los novatos,
Para copiar la línea actual, en el modo de comando escriba:
"*yy
Para copiar todo el archivo / búfer, en el modo de comando, primero vaya al principio con gg
, luego escriba
"*yG
Como se indicó, esto requiere +clipboard
fuera de vim --version
, que indica la disponibilidad de soporte para portapapeles, -clipboard
significa no.
Sólo en vim bajo el terminal de Ubuntu,
presione shift + drag mouse
para seleccionar un texto en vim luego ctrl + shift + c
en el terminal
luego ctrl + v
en otro editor
Si está usando vim en MAC OSX, desafortunadamente viene con la versión más antigua y no cumple con las opciones del portapapeles. Por suerte, Homebrew puede resolver fácilmente este problema.
instalar vim:
brew install vim --with-lua --with-override-system-vim
instalar gui verion de vim:
brew install macvim --with-lua --with-override-system-vim
reinicia el terminal para que surta efecto.
añada la siguiente línea a ~ / .vimrc
set clipboard=unnamed
ahora puede copiar la línea en vim con yy
y pegarla en todo el sistema.
Método actualizado :
Nunca estuve satisfecho con el método del portapapeles durante años. El mayor inconveniente es que arruinará el historial de tu portapapeles, incluso cuando usas x
para eliminar. Aquí hay una solución mejor y más elegante.
Copie el texto [rango] de vim en el portapapeles del sistema. (Sugerencia: use
v
oV
para seleccionar el rango primero, y luego escriba los dos puntos:
para activar el comando Ex):
:[range]yank +
p.ej,
:5,10y *
(copiar / tirar líneas 5-10 al registro del portapapeles del sistema*
)Pegue el contenido del portapapeles del sistema en vim en una nueva línea:
:put +
Si está utilizando GVim, también puede set guioptions+=a
. Esto activará la copia automática al portapapeles del texto que resaltes en modo visual.
Desventaja: tenga en cuenta que los administradores avanzados del portapapeles (con historial) en este caso obtendrán todo su historial de selección ...
Si se conecta al sistema Unix a través de Putty, siga los pasos a continuación para copiar el contenido de un archivo.
- Resalte el texto que desea copiar (podrá copiar página por página)
- presiona ctrl + c (copiará el texto al portapapeles
- pegar en cualquier editor externo Hecho
Si su vim se compila sin la opción +xterm_clipboard
como está por defecto en Debian y supongo que en Ubuntu, puede canalizar la selección o el búfer completo a un programa externo que maneje el portapapeles del escritorio. Para xclip
(que puede necesitar instalar previamente), el comando será :w !xclip -sel clip
Si tiene xclip, una forma fácil de copiar texto al portapapeles es la siguiente:
- Yank texto que desea copiar. (
y
comando en vainilla vim) - Escriba
:call system("xclip -selection clipboard", @")
:call system()
ejecuta un comando de terminal. Toma dos argumentos, el primero el comando, el segundo qué canalizar a ese comando. Por ejemplo :echom system("head -1", "Hello/nWorld")
devuelve Hello (con algo de relleno). echom devuelve la salida de un comando, la llamada no lo hace.
xclip -selection clipboard
simplemente copia el texto en el portapapeles del sistema en lugar del portapapeles X predeterminado, (acceso mediante el botón moue central).
@"
devuelve el último texto cortado" es el registro predeterminado, pero puede usar cualquier registro. Para ver el contenido de todos los registros, escriba :registers
.
Soy un Vim newby pero, para copiar todo el texto al portapapeles del sistema (por ejemplo, si desea pegarlo en un procesador de textos u otro editor de texto como gedit, mousepad, etc.), en modo normal:
ggVGy
o, más simplemente:
:% y
Como sugerí, también instalé vim-gtk y puse
establecer portapapeles = unnamedplus
en mi .vimrc
y todo funciona bien
Si desea copiar solo una parte del texto, use el modo visual (v) , seleccione el texto que desea copiar y presione y .
Finalmente, sugiero un programa de portapapeles como Clipman (mi favorito), Clipit, Parcellite o similar.
(Estoy usando vim 8.0 en Debian Stretch Xfce)
¡Perdóname por mi inglés! :-)
Tal vez alguien lo encontrará útil. Quería mantenerme independiente del portapapeles de X, y aún así poder copiar y pegar un poco de texto entre dos versiones en ejecución. Este pequeño código guarda el texto seleccionado en el archivo temp.txt para copiar. Pon el código de abajo en tu .vimrc. Use CTRL-c CTRL-v para hacer el trabajo.
vnoremap: w! cp / dev / null ~ / temp.txt && cat> ~ / temp.txt
noremap: r! cat ~ / temp.txt
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 es compatible con el portapapeles) y luego lo comprobé de nuevo:
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.
Utilice el registro "+
para copiar al portapapeles del sistema (es decir, "+y
lugar de y
).
Del mismo modo, puede pegar desde "+
para obtener texto desde el portapapeles del sistema (es decir, "+p
lugar de p
).
para OSX, como se aclaró claramente en las 10342 respuestas anteriores, debe asegurarse de que vim sea compatible con la función del portapapeles, dijo que el que viene pre-enviado con OSX NO es compatible con el portapapeles, y que si ejecuta brew install vim
funcionaría .
Excepto que la ejecución de vi aún te hará ejecutar la versión OSX preshipped, no la que instalaste desde brew.
Para superar esto, simplemente asigné un alias a mi comando vim a la versión Brew, no al predeterminado de OSX:
alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"
y ahora estoy de oro
selecting
con la ayuda del mouse
y la right-click copy
funcionó en mi caso.
No quería que se incluyeran los números de línea, así que :set nonumber
antes de copying
.
Para Ubuntu - Julio 2018
Utilice el registro "+ para copiar al portapapeles del sistema (es decir, " + y en lugar de y ).
Del mismo modo, puede pegar desde "+ para obtener texto desde el portapapeles del sistema (es decir, " + p en lugar de p ).
También debe asegurarse de que vim esté compilado con soporte para el portapapeles. Tratar:
vim --version | grep .xterm_clipboard -o
y si es -xterm_clipboard (un prefijo menos), entonces no tiene soporte.
Aquí hay algunas instrucciones para cambiar con una versión funcional de vim que tenga soporte para el portapapeles.
- $ sudo apt-get purge vim
- $ sudo apt-get autoremove (elimina cualquier paquete de dependencias vim extrañas del sistema)
- $ sudo apt-get install vim-gnome
Compruebe de nuevo con vim --version | grep .xterm_clipboard -o
vim --version | grep .xterm_clipboard -o
y puede confirmar que el portapapeles ya está disponible (es decir ,. + xterm_clipboard )
Buena suerte.