¿Es posible copiar al portapapeles directamente desde Vim? yysolo copia cosas al búfer interno de Vim. Quiero copiar al portapapeles del sistema operativo. ¿Existe tal comando en Vim o solo puedes tirar cosas dentro de Vim?
Por favor, vea la respuesta subestimada que aclara un hecho importante: ¡debe haber compilado vim con la función + del portapapeles para que CUALQUIERA de las sugerencias siguientes funcione en primer lugar! Este NO es el predeterminado en la mayoría de los sistemas.
Neil Traft
77
@NeilTraft, algunas respuestas sugieren canalizar desde vim a programas externos, por lo que la afirmación de que CUALQUIER respuesta requiere + bandera del portapapeles, es incorrecta. Solo señalando para salvar a los futuros lectores de la confusión.
¡Asegúrese de haberlo hecho sudo apt-get install vim-gnomeantes de aplicar estos comandos a continuación o obtendrá un error de registro no válido!
Harnirvair Singh
77
@Harnirvair Para muchos conjuntos de lectores aquí, vim-gnomees probable que sea excesivo o simplemente no esté disponible en su sistema operativo / distribución, mientras que sospecho vim-gtky vim-gtk3es más probable que exista y obtenga menos dependencias, al tiempo que proporciona la integración del portapapeles (al menos para aquellos que todavía están en X11; No estoy seguro de cómo todo esto interactúa con Wayland).
underscore_d
Respuestas:
497
El *registro hará esto. En Windows, +y *son equivalentes. En unix hay una sutil diferencia entre +y *:
En 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 desea la mayor parte del tiempo, así que lo uso *porque funciona como lo espero en ambos entornos.
En las distribuciones de Linux, primero debe instalar vim-gtk(también conocido como gvim) para obtener la funcionalidad del portapapeles. Esto se debe a que vim no gtk normalmente se compila sin compatibilidad con X11. Esto es para permitir que se ejecute solo en máquinas de consola (a menudo servidores).
Y para aquellos confundidos acerca de cómo usar los registros al tirar o poner, simplemente escribes "el nombre del registro. Entonces, para copiar algo en el registro del portapapeles, escriba "*yy luego escriba "*p(crédito: Kyle Mathews)
No funciona en mac osx lion. Después de presionar "a continuación *, que hace que el ruido del mac hace cuando no se puede hacer algo ¿Cómo lo hago en Mac.?
Eddy
62
También debe asegurarse de que vim se compila con soporte para el portapapeles. El vim predeterminado en Ubuntu no lo es. Intenta vim --version|grep .xterm_clipboard -oy si es -así no tienes soporte. Descargue una versión diferente según ubuntuforums.org/showthread.php?t=1686955
Sparhawk
66
Si está utilizando Linux, debe +registrarse. Por ejemplo, si desea copiar tres líneas en el portapapeles del sistema, use comandos como v3j"+y, y luego puede pegarlas en otra aplicación más en otro VIM. El uso de *registrarse en Linux solo puede copiar y pegar entre diferentes aplicaciones VIM.
diabloneo
66
En Linux, el registro * no funciona para copiar y pegar externamente.
weberc2
11
weberc2 y diabloneo, el registro * es para el portapapeles de selección, accesible desde el botón central, no desde el menú pegar o ^ V
Jim Keener
354
En Mac OSX
copiar parte seleccionada: seleccionar visualmente el texto (escribir vo Ven modo normal) y escribir:w !pbcopy
copia todo el archivo :%w !pbcopy
pegar desde el portapapeles :r !pbpaste
En la mayoría de las distribuciones de Linux , puede sustituir:
pbcopyarriba con xclip -i -sel coxsel -i -b
pbpasteusando xclip -o -sel -co xsel -o -b
- Nota: en caso de que ninguna de estas herramientas ( xsely xclip) estén preinstaladas en su distribución, probablemente pueda encontrarlas en los repositorios
+1 funciona con Lion, aunque vim --versionmuestra-clipboard
roplacebo
26
compatible con vim que se envía con mavericks osx. agregar a su .vimrc vnoremap <C-c> :w !pbcopy<CR><CR> noremap <C-v> :r !pbpaste<CR><CR>Para usar esta asignación, si desea copiar, resalte el texto en modo visual y presione Ctrl-c para copiar. Para pegar desde el portapapeles del sistema, presione Ctrl-v.
davidtingsu
77
En Linux, esto funciona con: w! Xclip -sel c o: w! Xsel -b
trve.fa7ad
44
Para Linux Ctrl + C copia: en ~ / .vimrc agregue:vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
andy
3
Una respuesta mucho más útil que la aceptada. ¡Gracias!
Bryce Johnson
165
En su archivo vimrc puede especificar que use 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 estos funcionen.
Como una adición a su nota, es posible que también deba instalar paquetes adicionales para que esto funcione. Si tu vim carece de la +xterm_clipboardfunción (visible cuando corres vim --version). Este fue el caso para mí (ejecutando Kubuntu 12.10). Tuve que instalar el vim-gui-commonpaquete para obtener la funcionalidad correcta.
Jacob Dalton
44
set clipboard=unnamedfunciona en Mac OS 10.11.6 (El Capitan) con vim 7.4
Purplejacket
1. Copiar al arrastrar 2. selección del mouse, funciona en Mac Sierra-10.12.6 y vim-version: 8.0.1800 especificando los siguientes comandos en el archivo ~ / .vimrc set mouse=vyset clipboard=unnamed
dkb
set clipboard=unnamedfunciona en MacOS Catalina
Diego Somar
Es posible que desee actualizar su respuesta. No funciona en Ubuntu 18.04 con vim 8.0.
Luís de Sousa
124
Utilice el registro "+para copiar en el portapapeles del sistema (es decir, en "+ylugar de y).
Del mismo modo, puede pegar "+para obtener texto del portapapeles del sistema (es decir, en "+plugar de p).
Uso "*, pero parece que solo hay una diferencia en X.
dash-tom-bang
3
@ dash-tom-bang: la diferencia +/ *es SELECTIONfrente a los PRIMARYbúferes de copia (no recuerdo cuál es qué
cajero automático
2
Sí, la estrella es la selección, más el portapapeles.
dash-tom-bang
66
El carácter de comillas dobles sirve como selector de registro en vi y vim.
Amardeep AC9MF
1
Dos conjuntos de atajos para recordar: "+yy(copiar línea al portapapeles) y "+yy(copiar línea a la selección); "+p(pegar desde el portapapeles) y "*p(pegar desde la selección). "es seleccionar el registro que es el registro interno propio de vim por defecto (la forma yyy pfuncionaría sin hacer referencia a ningún tipo de registro). PD: Me pregunto si hay un personaje para el propio registro interno de Vim, algo así como lo "&yyque se vuelve yypor defecto.
72
@Jacob Dalton ha mencionado esto en un comentario, pero nadie parece haber mencionado en una respuesta que vim tiene que ser compilado con soporte de 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'. +clipboardsignifica que eres bueno y las sugerencias aquí funcionarán para ti, mientras que -clipboarddebes recompilar y reconstruir vim.
O, en lugar de compilarse, puede instalar un paquete vim que ya se ha creado con soporte para portapapeles. En OS X, Homebrew tiene esta: brew install vim. En Ubuntu, puedes usar sudo apt-get install vim-gnome. En otras distribuciones de Linux (que no sean GNOME) puede instalar vim-gtko vim-athena.
Sus respuestas explican por qué el yank no funciona con el portapapeles, solo con su información podría hacer una mejor búsqueda en Google y hacer que funcione fácilmente. Y ahora está funcionando. Sería mejor si también incluye el comentario de @NeilTraft a su respuesta para que las personas no necesiten hacer búsquedas en Google.
Yana Agun Siswanto
En Mac, justo después de brew install vimagregar set clipboard=unnameda .vimrc. Ejecutar source ~/.vimrcen línea de comando. En .bash_profile agregué y alias vim="/usr/local/bin/vim"luego ejecuté source ~/.bash_profile. Ahora en vim solo use yy ppara copiar / pegar
Dmitry
59
Resumiendo y haciéndolo más fácil para los novatos,
Para copiar la línea actual, en modo comando escriba:
"*yy
Para copiar todo el archivo / búfer, en modo comando, primero vaya al principio a través de gg, luego escriba
"*yG
Como se señaló, esto requiere +clipboardfuera vim --version, lo que indica la disponibilidad de soporte del portapapeles, -clipboardsignifica que no.
"*5yydice 5 lines yankedpero nada en el portapapeles? os / x.
javadba
2
Sí, había verificado + portapapeles
javadba
nnoremap <leader>c "* en .vimrcfunciona bastante bien como una "copia" de clases, seguido de un movimiento para agarrar el objeto de texto que desea copiar en el portapapeles del sistema operativo.
cpk
Gracias, lo explicaste exactamente como lo necesitaba.
Symen Timmermans
3
He instalado vim-gtka su vez -clipboarden +clipboard, que "+yyestá trabajando.
Lai32290
30
Si está utilizando vim en MAC OSX, desafortunadamente viene con una versión anterior y no cumple con las opciones del portapapeles. Afortunadamente, homebrew puede resolver fácilmente este problema.
instalar vim:
brew install vim
instalar gui verion de vim:
brew install macvim
reinicie el terminal para que surta efecto.
agregue la siguiente línea a ~ / .vimrc
set clipboard=unnamed
ahora puede copiar la línea en vim con yyy pegarla en todo el sistema.
Método actualizado :
Nunca estuve satisfecho con el método del portapapeles establecido durante años. El mayor inconveniente es que arruinará el historial del portapapeles, incluso cuando lo use xpara eliminarlo. Aquí hay una solución mejor y más elegante.
Copie el texto [rango] de vim en el portapapeles del sistema. (Sugerencia: use vo Vpara seleccionar el rango primero y luego escriba los dos puntos :para activar el comando Ex): :[line-range]yank +
por ejemplo, :5,10y * (copie / tire de las 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 +
Nota:
Si selecciona un rango de palabras, lo anterior no funcionará. use "* y o " + y para guardar este bloque visual en el portapapeles. Sin embargo, esto es difícil de escribir, todavía estoy pensando en alternativas.
: ayuda "* o : ayuda * + para más información
brew info vimpodrá ver otras opciones para instalar vim. Actualmente no tiene otras opciones.
Me gustaría probar esto para evitar instalar muchas cosas de Xorg en sistemas mínimos, pero me falta algo. Obtengo "No es un comando de editor [rango] yank +" después de seleccionar en modo v y luego presionar ":".
jeremyjjbrown
29
Para Ubuntu: julio de 2018
Utilice el registro "+ para copiar en el portapapeles del sistema (es decir, " + y en lugar de y ).
Del mismo modo, puede pegar desde "+ para obtener texto del portapapeles del sistema (es decir, " + p en lugar de p ).
También debe asegurarse de que vim se compila 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 intercambiar con una versión funcional de vim que tenga soporte para portapapeles.
$ sudo apt-get purge vim
$ sudo apt-get autoremove (elimina los paquetes de dependencia vim extraños del sistema)
$ sudo apt-get install vim-gnome
Verifique nuevamente con vim --version | grep .xterm_clipboard -oy puede confirmar que el portapapeles ahora está disponible (es decir. + Xterm_clipboard )
Me alegraste el día, o tal vez mi mes. Después de trabajar con vim sin portapapeles en Ubuntu durante años, esta es una sensación increíble. arcseldon, gracias !!
evanrmurphy
Además de lo que se describió anteriormente, tuve que poner set clipboard=unnamedplusmi .vimrcarchivo para que el tirón funcione. Estoy usando Ubuntu 18.04.
Elijah
23
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 Ctrl+c para obtener lo que haya seleccionado en su portapapeles.
No agregué la línea a mi .vimrc, pero el enlace que proporcionó fue muy útil. Si mantiene presionada la tecla MAYÚS mientras selecciona texto en vim, puede copiar texto sin ingresar al modo visual. Así que gracias y +1.
Stefan van den Akker
Shift trick es lo que necesitaba. Funciona tan bien con editores como terminator que usan Ctrl + Shift + c para copiar mientras está en el indicador, que es lo que intenté al principio. Tenía -xterm_clipboard instalado con vim.
Anders Elmgren
18
la solución para mí fue instalar vim adicional que incluye la opción de portapapeles:
Esto es lo que tuve que hacer para Ubuntu 16.04. Probé las otras sugerencias sin éxito. Esto fue lo más fácil e hice lo que esperaba con "+ y.
Steven Eckhoff
¡Funciona de maravilla sin ningún cambio de vimrc! sigue siendo válido en Ubuntu 16.04
makerj
La "+ysugerencia solo funcionó vim-gnome. Usando Linux Mint 18.2.
Samaursa
14
Si está utilizando GVim, también puede hacerlo set guioptions+=a. Esto activará la copia automática al portapapeles del texto que resalte en modo visual.
Inconveniente: Tenga en cuenta que los administradores de portapapeles avanzados (con historial) en este caso obtendrán todo su historial de selección ...
+1, me sorprendió que ahora se requiera este paso. En toda mi instalación anterior de Arch no tuve que hacerlo.
Konstantinos
También funcionó para Ubuntu 18.04 y se ejecuta en tmux. ¡Gracias!
James Klein el
10
Si su vim se compila sin una +xterm_clipboardopción como la que está por defecto en Debian y supongo que Ubuntu, puede canalizar la selección o el búfer completo al programa externo que maneja el portapapeles del escritorio. Para xclip(que puede necesitar instalar previamente), el comando será:w !xclip -sel clip
Gracias por esto, no me ha funcionado en Ubuntu (por lo que confirmar su suposición de Ubuntu es correcto) durante años y no sabía por qué. Ahora puedo ver -xterm_clipboarden las banderas que se muestran cuando yo vim --version.
Esto funciona para seleccionar solo lo que es visual en vim, ¿qué sucede si desea seleccionar todo el archivo?
Gerep
@Gerep este método no funciona para la selección de archivos completos. es bueno seleccionar una sección de texto solo en el terminal vim y donde se muestra el texto en la pantalla del terminal.
Supawat Pusavanno
1
Esto copia los números de línea, los bordes del búfer de las divisiones y todo lo que está visible, en lugar de solo el texto / código.
Zelphir Kaltstahl
9
Si tiene xclip, una forma fácil de copiar texto en el portapapeles es la siguiente:
Texto de Yank que quieres copiar. ( ycomando en vainilla vim)
:call system()ejecuta un comando de terminal. Se necesitan 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.
xclip -selection clipboard simplemente copia el texto en el portapapeles del sistema en lugar del portapapeles X predeterminado (se accede mediante el botón de medio).
@"devuelve el último texto arrancado. "es el registro predeterminado, pero puede usar cualquier registro. Para ver el contenido de todos los registros, escriba :registers.
Esto es más robusto, funciona incluso cuando vim no cumple con el soporte para el portapapeles y en cualquier sistema operativo. Por ejemplo, en Mac corre :call system("pbcopy",@"). Uno puede vincular este comando a una clave.
ilija139
funciona bien, pero ¿puedo ponerlo en mi vimrc? ¿Funcionará? No está funcionando para mí.
thenakulchawla
5
Esta respuesta es específica para usuarios de MAC.
El VIM predeterminado disponible con MAC no viene con la opción del portapapeles habilitada. Necesita esa opción para acceder al portapapeles del sistema.
Para verificar si su vim tiene esa opción habilitada, use el siguiente comando
vim --version
En el resultado, deberías haberlo hecho +clipboard. Si esto es-clipboard , su VIM NO tiene la opción de acceder al portapapeles del sistema.
Necesita HACER e instalar su VIM con la opción que necesita. Los siguientes son los comandos.
# Create the directories you need
$ sudo mkdir -p /opt/local/bin
# Download, compile, and install the latest Vim
$ cd ~
$ git clone https://github.com/vim/vim.git
$ cd vim
$ ./configure --prefix=/opt/local
$ make
$ sudo make install
# Add the binary to your path, ahead of /usr/bin
$ echo 'PATH=/opt/local/bin:$PATH' >> ~/.bash_profile
# Reload bash_profile so the changes take effect in this window
$ source ~/.bash_profile"
Lo anterior instalará el último VIM con la opción +clipboardhabilitada.
Ahora necesita configurar el portapapeles del sistema. Agregue la siguiente línea a~/.vimrc
set clipboard=unnamed
Ahora puede tirar texto al portapapeles del sistema. Los pasos a continuación explican cómo tirar.
En modo de comando vim press v , esto lo cambiará al modo VISUAL.
Mueva el cursor para seleccionar el texto o las líneas que necesita copiar.
Press y, esto copiará el texto seleccionado al portapapeles.
Ir a cualquier aplicación externa y CMD + vpegar.
Yo uso MACBook Pro con macOS Mojave y lo anterior funciona en él.
Quizás alguien lo encuentre útil. Quería mantenerme independiente del portapapeles X y aún así poder copiar y pegar texto entre dos vims en ejecución. Este pequeño código guarda el texto seleccionado en el archivo temp.txt para copiarlo. Ponga el siguiente código en su .vimrc. Use CTRL-c CTRL-v para hacer el trabajo.
Soy un nuevo Vim pero, para copiar todo el texto en el portapapeles del sistema (por ejemplo, si desea pegarlo en un procesador de texto 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.
He estado luchando con esto durante meses hasta ahora en MacOsX usando atajos de teclado. Sé que la pregunta no se trata de usar cortos de teclado. Pero esto podría ayudar a alguien con la misma preocupación.
Descubrí que si desmarca:
Ver -> Permitir informes del mouse
desde el menú Terminal, podrá copiar al portapapeles usando
Escribí una línea simple en mi .vimrc para que la copia funcione. Espero que esto ayude a alguien. Mi vim no está instalado con soporte para Portapapeles, desafortunadamente, así que ninguna de estas sugerencias me funcionó. Básicamente, pegue esta línea en su .vimrc:
El comprador tenga cuidado. En mac, esto tiene efectos extraños.
azatar
esto no parece copiar nada al portapapeles cuando se usa según las instrucciones (en linux ubuntu 16.04, no es compatible con el portapapeles), y si se abren varios archivos en una sesión vim, cerrará la pestaña donde se tomaron las acciones (selección visual y Cc )
calocedrus
2
Para algunos teclados internacionales, es posible que deba presionar "+ Spacepara obtener a ".
Entonces en ese caso tendrías que presionar "Space+yo"Space*y
En caso de que no desee utilizar 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 así, 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, etc.) y al final resultó que en mi emulador de terminal es suficiente con presionar Mayús y seleccionar cualquier texto que desee copiar. Eso es. Muy simple y sin necesidad de jugar con la configuración. (Yo uso urxvt por cierto).
para OSX, al igual que las respuestas 10342 anteriores aclaradas, debe asegurarse de que vim sea compatible con la función del portapapeles, dijo que la que viene con OSX NO es compatible con el portapapeles, y que si ejecuta
brew install vim funcionaría.
Excepto que ejecutar vi todavía te hará ejecutar la versión OSX preenviada, no la que instalaste desde brew.
para superar esto, simplemente alias mi comando vim a la versión brew, no la predeterminada de OSX:
alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"
Mi solución fue poner la siguiente línea a .vimrc:
map <C-y> :w !xclip -sel c <CR><CR>
La secuencia de comandos copia la línea seleccionada (modo visual) o el contenido del archivo (si no se selecciona ninguno) en el portapapeles usando Ctrl + y. Estoy usando Manjaro Linux si eso importa.
Estoy en mac osx (10.15.3) y nuevo en vim. Encontré esto muy frustrante y todas las respuestas aquí demasiado complicadas y / o no se aplicaron a mi situación. Terminé haciendo que esto funcionara de 2 maneras:
Agregar vmap '' :w !pbcopy<CR><CR>a su ~ / .vimrc
Ahora puede seleccionar visualmente y presionar ''(dos apóstrofes) para copiar al portapapeles
Instale la versión más reciente de vim para poder acceder a la solución más recomendada en otras respuestas:
brew install vim alias vim=/usr/local/bin/vim(debería agregar esto a su ~ / .bashrc o equivalente)
Ahora puede seleccionar visualmente y presionar "+yypara copiar al portapapeles
sudo apt-get install vim-gnome
antes de aplicar estos comandos a continuación o obtendrá un error de registro no válido!vim-gnome
es probable que sea excesivo o simplemente no esté disponible en su sistema operativo / distribución, mientras que sospechovim-gtk
yvim-gtk3
es más probable que exista y obtenga menos dependencias, al tiempo que proporciona la integración del portapapeles (al menos para aquellos que todavía están en X11; No estoy seguro de cómo todo esto interactúa con Wayland).Respuestas:
El
*
registro hará esto. En Windows,+
y*
son equivalentes. En unix hay una sutil diferencia entre+
y*
:*
es probablemente lo que desea la mayor parte del tiempo, así que lo uso*
porque funciona como lo espero en ambos entornos.En las distribuciones de Linux, primero debe instalar
vim-gtk
(también conocido comogvim
) para obtener la funcionalidad del portapapeles. Esto se debe a que vim no gtk normalmente se compila sin compatibilidad con X11. Esto es para permitir que se ejecute solo en máquinas de consola (a menudo servidores).Y para aquellos confundidos acerca de cómo usar los registros al tirar o poner, simplemente escribes
"
el nombre del registro. Entonces, para copiar algo en el registro del portapapeles, escriba"*y
y luego escriba"*p
(crédito: Kyle Mathews)fuente
vim --version|grep .xterm_clipboard -o
y si es-
así no tienes soporte. Descargue una versión diferente según ubuntuforums.org/showthread.php?t=1686955+
registrarse. Por ejemplo, si desea copiar tres líneas en el portapapeles del sistema, use comandos comov3j"+y
, y luego puede pegarlas en otra aplicación más en otro VIM. El uso de*
registrarse en Linux solo puede copiar y pegar entre diferentes aplicaciones VIM.En Mac OSX
copiar parte seleccionada: seleccionar visualmente el texto (escribir
v
oV
en modo normal) y escribir:w !pbcopy
copia todo el archivo
:%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
usandoxclip -o -sel -c
oxsel -o -b
- Nota: en caso de que ninguna de estas herramientas (
xsel
yxclip
) estén preinstaladas en su distribución, probablemente pueda encontrarlas en los repositoriosfuente
vim --version
muestra-clipboard
vnoremap <C-c> :w !pbcopy<CR><CR> noremap <C-v> :r !pbpaste<CR><CR>
Para usar esta asignación, si desea copiar, resalte el texto en modo visual y presione Ctrl-c para copiar. Para pegar desde el portapapeles del sistema, presione Ctrl-v.vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
En su archivo vimrc puede especificar que use automáticamente el portapapeles del sistema para copiar y pegar.
En el conjunto de Windows:
En el conjunto de Linux (vim 7.3.74+):
NOTA: Es posible que necesite usar una versión actualizada de Vim para que estos funcionen.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
fuente
+xterm_clipboard
función (visible cuando corresvim --version
). Este fue el caso para mí (ejecutando Kubuntu 12.10). Tuve que instalar elvim-gui-common
paquete para obtener la funcionalidad correcta.set clipboard=unnamed
funciona en Mac OS 10.11.6 (El Capitan) con vim 7.4set mouse=v
yset clipboard=unnamed
set clipboard=unnamed
funciona en MacOS CatalinaUtilice el registro
"+
para copiar en el portapapeles del sistema (es decir, en"+y
lugar dey
).Del mismo modo, puede pegar
"+
para obtener texto del portapapeles del sistema (es decir, en"+p
lugar dep
).fuente
+
/*
esSELECTION
frente a losPRIMARY
búferes de copia (no recuerdo cuál es qué"+yy
(copiar línea al portapapeles) y"+yy
(copiar línea a la selección);"+p
(pegar desde el portapapeles) y"*p
(pegar desde la selección)."
es seleccionar el registro que es el registro interno propio de vim por defecto (la formayy
yp
funcionaría sin hacer referencia a ningún tipo de registro). PD: Me pregunto si hay un personaje para el propio registro interno de Vim, algo así como lo"&yy
que se vuelveyy
por defecto.@Jacob Dalton ha mencionado esto en un comentario, pero nadie parece haber mencionado en una respuesta que vim tiene que ser compilado con soporte de 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'
.+clipboard
significa que eres bueno y las sugerencias aquí funcionarán para ti, mientras que-clipboard
debes recompilar y reconstruir vim.fuente
brew install vim
. En Ubuntu, puedes usarsudo apt-get install vim-gnome
. En otras distribuciones de Linux (que no sean GNOME) puede instalarvim-gtk
ovim-athena
.vim
e instalargvim
wiki.archlinux.org/index.php/Vim#Installationbrew install vim
agregarset clipboard=unnamed
a .vimrc. Ejecutarsource ~/.vimrc
en línea de comando. En .bash_profile agregué yalias vim="/usr/local/bin/vim"
luego ejecutésource ~/.bash_profile
. Ahora en vim solo usey
yp
para copiar / pegarResumiendo y haciéndolo más fácil para los novatos,
Para copiar la línea actual, en modo comando escriba:
Para copiar todo el archivo / búfer, en modo comando, primero vaya al principio a través de
gg
, luego escribaComo se señaló, esto requiere
+clipboard
fueravim --version
, lo que indica la disponibilidad de soporte del portapapeles,-clipboard
significa que no.fuente
"*5yy
dice5 lines yanked
pero nada en el portapapeles? os / x.nnoremap <leader>c "*
en.vimrc
funciona bastante bien como una "copia" de clases, seguido de un movimiento para agarrar el objeto de texto que desea copiar en el portapapeles del sistema operativo.vim-gtk
a su vez-clipboard
en+clipboard
, que"+yy
está trabajando.Si está utilizando vim en MAC OSX, desafortunadamente viene con una versión anterior y no cumple con las opciones del portapapeles. Afortunadamente, homebrew puede resolver fácilmente este problema.
instalar vim:
brew install vim
instalar gui verion de vim:
brew install macvim
reinicie el terminal para que surta efecto.
agregue 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 establecido durante años. El mayor inconveniente es que arruinará el historial del portapapeles, incluso cuando lo use
x
para eliminarlo. 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)::[line-range]yank +
por ejemplo,
:5,10y *
(copie / tire de las 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 +
Nota:
brew info vim
podrá ver otras opciones para instalar vim. Actualmente no tiene otras opciones.fuente
--with-override-system-vim
debería ser--with-override-system-vi
Para Ubuntu: julio de 2018
Utilice el registro "+ para copiar en el portapapeles del sistema (es decir, " + y en lugar de y ).
Del mismo modo, puede pegar desde "+ para obtener texto del portapapeles del sistema (es decir, " + p en lugar de p ).
También debe asegurarse de que vim se compila con soporte para el portapapeles. Tratar:
y si es -xterm_clipboard (un prefijo menos), entonces no tiene soporte.
Aquí hay algunas instrucciones para intercambiar con una versión funcional de vim que tenga soporte para portapapeles.
Verifique nuevamente con
vim --version | grep .xterm_clipboard -o
y puede confirmar que el portapapeles ahora está disponible (es decir. + Xterm_clipboard )Buena suerte.
fuente
set clipboard=unnamedplus
mi.vimrc
archivo para que el tirón funcione. Estoy usando Ubuntu 18.04.No pude copiar al sistema de mi portapapeles porque tenía esto en mi archivo ~ / .vimrc:
Pero si agrega esta línea a continuación, le permitirá simplemente Ctrl+c para obtener lo que haya seleccionado en su portapapeles.
Discusión original y más detalles: copie el texto de vim con set mouse = a habilitado
fuente
la solución para mí fue instalar vim adicional que incluye la opción de portapapeles:
fuente
"+y
sugerencia solo funcionóvim-gnome
. Usando Linux Mint 18.2.Si está utilizando GVim, también puede hacerlo
set guioptions+=a
. Esto activará la copia automática al portapapeles del texto que resalte en modo visual.Inconveniente: Tenga en cuenta que los administradores de portapapeles avanzados (con historial) en este caso obtendrán todo su historial de selección ...
fuente
Puedes encontrar las respuestas aquí Arch Wiki
Para Linux: en primer lugar, debe habilitar el Portapapeles en su versión vim mediante la instalación
gvim
.A continuación, debe poner esta línea en su
.vimrc
archivo.set clipboard=unnamedplus
fuente
Si su vim se compila sin una
+xterm_clipboard
opción como la que está por defecto en Debian y supongo que Ubuntu, puede canalizar la selección o el búfer completo al programa externo que maneja el portapapeles del escritorio. Paraxclip
(que puede necesitar instalar previamente), el comando será:w !xclip -sel clip
fuente
-xterm_clipboard
en las banderas que se muestran cuando yovim --version
.En vim solo bajo la terminal de ubuntu,
presione
shift + drag mouse
para seleccionar un texto en vim y luegoctrl + shift + c
en el terminalluego
ctrl + v
en otro editorfuente
Si tiene xclip, una forma fácil de copiar texto en el portapapeles es la siguiente:
y
comando en vainilla vim):call system("xclip -selection clipboard", @")
:call system()
ejecuta un comando de terminal. Se necesitan 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.xclip -selection clipboard
simplemente copia el texto en el portapapeles del sistema en lugar del portapapeles X predeterminado (se accede mediante el botón de medio).@"
devuelve el último texto arrancado. "es el registro predeterminado, pero puede usar cualquier registro. Para ver el contenido de todos los registros, escriba:registers
.fuente
:call system("pbcopy",@")
. Uno puede vincular este comando a una clave.Esta respuesta es específica para usuarios de MAC.
El VIM predeterminado disponible con MAC no viene con la opción del portapapeles habilitada. Necesita esa opción para acceder al portapapeles del sistema.
Para verificar si su vim tiene esa opción habilitada, use el siguiente comando
En el resultado, deberías haberlo hecho
+clipboard
. Si esto es-clipboard
, su VIM NO tiene la opción de acceder al portapapeles del sistema.Necesita HACER e instalar su VIM con la opción que necesita. Los siguientes son los comandos.
Lo anterior instalará el último VIM con la opción
+clipboard
habilitada.Ahora necesita configurar el portapapeles del sistema. Agregue la siguiente línea a
~/.vimrc
Ahora puede tirar texto al portapapeles del sistema. Los pasos a continuación explican cómo tirar.
press v
, esto lo cambiará al modo VISUAL.Press y
, esto copiará el texto seleccionado al portapapeles.CMD + v
pegar.Yo uso MACBook Pro con macOS Mojave y lo anterior funciona en él.
fuente
Quizás alguien lo encuentre útil. Quería mantenerme independiente del portapapeles X y aún así poder copiar y pegar texto entre dos vims en ejecución. Este pequeño código guarda el texto seleccionado en el archivo temp.txt para copiarlo. Ponga el siguiente código en su .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
fuente
set clipboard=unnamed
en suvimrc
.Visual
modo (Presione v para ingresar).Normal
modo (Presione escape [esc]), presione y para copiar.Normal
modo Vim .fuente
Soy un nuevo Vim pero, para copiar todo el texto en el portapapeles del sistema (por ejemplo, si desea pegarlo en un procesador de texto 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! :-)
fuente
Tuve un problema porque mi vim no era compatible con el portapapeles :
Instalé vim-gnome (que admite el portapapeles) y luego verifiqué nuevamente:
Ahora puedo copiar y pegar usando "+ y y" + p respectivamente.
fuente
He estado luchando con esto durante meses hasta ahora en MacOsX usando atajos de teclado. Sé que la pregunta no se trata de usar cortos de teclado. Pero esto podría ayudar a alguien con la misma preocupación.
Descubrí que si desmarca:
desde el menú Terminal, podrá copiar al portapapeles usando
de nuevo.
fuente
Escribí una línea simple en mi .vimrc para que la copia funcione. Espero que esto ayude a alguien. Mi vim no está instalado con soporte para Portapapeles, desafortunadamente, así que ninguna de estas sugerencias me funcionó. Básicamente, pegue esta línea en su .vimrc:
Si desea leer detalles sobre lo que hace esto, puede leer sobre esto en mi blog
fuente
Para algunos teclados internacionales, es posible que deba presionar "+ Spacepara obtener a
"
.Entonces en ese caso tendrías que presionar "Space+yo"Space*y
fuente
En caso de que no desee utilizar 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 así, 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, etc.) y al final resultó que en mi emulador de terminal es suficiente con presionar Mayús y seleccionar cualquier texto que desee copiar. Eso es. Muy simple y sin necesidad de jugar con la configuración. (Yo uso urxvt por cierto).
fuente
para OSX, al igual que las respuestas 10342 anteriores aclaradas, debe asegurarse de que vim sea compatible con la función del portapapeles, dijo que la que viene con OSX NO es compatible con el portapapeles, y que si ejecuta
brew install vim
funcionaría.Excepto que ejecutar vi todavía te hará ejecutar la versión OSX preenviada, no la que instalaste desde brew.
para superar esto, simplemente alias mi comando vim a la versión brew, no la predeterminada de OSX:
y ahora soy dorado
fuente
Mi solución fue poner la siguiente línea a .vimrc:
La secuencia de comandos copia la línea seleccionada (modo visual) o el contenido del archivo (si no se selecciona ninguno) en el portapapeles usando Ctrl + y. Estoy usando Manjaro Linux si eso importa.
fuente
Estoy en mac osx (10.15.3) y nuevo en vim. Encontré esto muy frustrante y todas las respuestas aquí demasiado complicadas y / o no se aplicaron a mi situación. Terminé haciendo que esto funcionara de 2 maneras:
asignación de teclas que usa pbcopy : funciona en la versión anterior de vim que se entrega con mac.
Instale la versión más reciente de vim para poder acceder a la solución más recomendada en otras respuestas:
fuente
selecting
con la ayuda demouse
yright-click copy
trabajé en mi caso.No quería que se incluyeran los números de línea, así que
:set nonumber
antescopying
.fuente
Nada de lo anterior funcionó para mí en mi computadora portátil con Windows.
Ctrl+ Cestaba bien para copiar ... ¡pero necesitaba Shift+ Insertpegar!
(Una buena razón para obtener siempre una computadora portátil donde Insertsiempre se pueda acceder sin presionar una tecla secundaria)
fuente
Shift+ Ctrl+ C si está en modo gráfico de Linux, pero primero debe seleccionar lo que necesita copiar.
fuente