Cómo copiar una selección al portapapeles OS X

225

Tengo un área seleccionada en Vim. ¿Cómo puedo copiarlo en el portapapeles OS X?

(El portapapeles OS X se puede escribir a través de una tubería a /usr/bin/pbcopy)

ʞɔıu
fuente
44
solo selección visual, entonces "+y.
zx1986
2
El vim que se envía con OSX no tiene +clipboardo +xterm-clipboard. Puedes verificar esto con vim --version | grep clipboard. Es posible resolver esto con brew install vim --with-client-server.
LondonRob
1
O utilice MacVim, que ofrece una versión de línea de comandos que puede enlazarse por enlaces simbólicos en su ~/biny luego ~/binpuede insertarse en su ruta antes del vim y los sinónimos normales instalados en el sistema.
el hombre de hojalata
Sobre la base de lo que escribió @ zx1986, hice tres cosas: 1) Agregué lo siguiente a mi ~ / .bashrc para alias vi / vim al modo terminal de MacVim: alias vi='mvim -v'2) Agregué lo siguiente a ~ / .vimrc, que asigna Ctrl + c (no Cmd + c): vnoremap <C-c> "+y3) Teclado Maestro configurado para escribir la secuencia de ^cteclas (Ctrl + C) cuando se ejecuta en el terminal (en mi caso, iTerm2) Esto permite utilizar Cmd + c para copiar texto en el portapapeles OSX para que se pueda pegar en otras aplicaciones OSX.
Neil Griffin

Respuestas:

79

Dependiendo de la versión de Vim que use, puedo usar el +registro para acceder al portapapeles.

" Compartir el portapapeles de Mac OS X " también puede tener algunas ideas que funcionen para usted.

Chris AtLee
fuente
55
Para las personas con VIM compilado sin + portapapeles, el enlace de arriba es un excelente recurso para dar soluciones sin recompilar VIM
sdjuan
DETALLE MUY IMPORTANTE !!! Si tiene Vim-versión 7.3, entonces esto podría no funcionar para usted, pero si tiene Vim-versión 7.4, entonces sí (y a veces ni siquiera tiene que hacer todo "+ y). Y lo verifica solo escribiendo> vim en el terminal y luego el número de versión es cuando lo inicia.
Zeth
esta respuesta es la misma que esta stackoverflow.com/a/680271/2652524
Gujarat Santana
1
El "+registro existe solo para X11 (a menos que compile vim con soporte + X11, que instalará un servidor X11 XQuartz en OS X), mientras que OS X no usa X11 como su sistema de Windows.
nn0p
Qué hacer, si ambos - vimy macvimtienen + portapapeles. Y clipboard=unnamedañadido a ~/.vimrc? Parece un verdadero dolor, probé todas las soluciones y actualmente tengo que usar spacemacs, cuando sé que tendré que usar el portapapeles global :)
Nikolay Fominyh
240

Para MacVim y Windows Gvim, simplemente agregue lo siguiente a su ~/.vimrc:

set clipboard=unnamed

Ahora todas las operaciones tales como yy, Dy Pel trabajo con el portapapeles. No es necesario prefijarlos con "*o "+.

George V. Reilly
fuente
2
He pasado toda la mañana descubriendo cómo separar los comandos y, d y P de ⌘-C y ⌘-V que MacVim te permite y finalmente me di cuenta de esto. Efectivamente, había agregado esto a mi vimrc cuando era un joven vim y me ha frustrado desde entonces.
Jonathan Dumaine
2
Para aquellos nuevos en MacVim, se puede usar desde la terminal con la -vbandera ( mvim -v). Tengo el mío alias a vim y mvim.
pk-nb
3
Como lo mencionó @VincentG en su comentario anterior, esto realmente funciona con versiones de Vim basadas en terminales, pero aquellos que usan tmux dentro del terminal deberán seguir una de las soluciones detalladas aquí: stackoverflow.com/a/11421329/456584
user456584
3
esta debería ser la respuesta aceptada, siempre y cuando :echo has("clipboard")diga 1, que es el caso de MacVim, y tengo un vialias que se ejecuta en su mvim -vlugar
jdsumsion
1
@Joseph, si :versionte muestra, -clipboardentonces la compilación de Vim no es compatible con la función del portapapeles. Estaba hablando de MacVim, que es una aplicación GUI.
George V. Reilly
136

Si el portapapeles está habilitado, puede copiar una región seleccionada al portapapeles presionando "*y

Para ver si está habilitado, ejecute vim --versiony busque +clipboardo -clipboard. Por ejemplo, no está habilitado de manera predeterminada en mi casilla 10.5.6:

% que vim
/ usr / bin / vim
% vim --version
VIM - Vi IMproved 7.2 (9 de agosto de 2008, compilado el 11 de noviembre de 2008 17:20:43)
Parches incluidos: 1-22
Compilado por [email protected]
Versión normal sin GUI.  Características incluidas (+) o no (-): 
... 
-clientserver -clipboard + cmdline_compl + cmdline_hist + cmdline_info + comentarios
 ...

Si hubiera sido compilado +clipboard, podría usar el "*registro para acceder al portapapeles del sistema.

Descargué la fuente 7.2 y la compilé (fácil como tar xjf vim-7.2.tar.bz && cd vim72 && ./configure && make && sudo make install), y el portapapeles fue habilitado:

% que vim
/ usr / local / bin / vim
% vim --version
VIM - Vi IMproved 7.2 (9 de agosto de 2008, compilado el 24 de marzo de 2009 17:31:52)
Compilado por [email protected]
Versión normal con GTK2 GUI.  Características incluidas (+) o no (-): 
... 
+ clientserver + portapapeles + cmdline_compl + cmdline_hist + cmdline_info + comentarios
 ...

Sin embargo, incluso después de compilar, no pude copiar al portapapeles cuando ejecuté vim en Terminal.app, solo en X11.app.

rampion
fuente
3
Compilé la última versión con + portapapeles y ahora el portapapeles nativo funciona con él como registro *. Además, establecer "set clipboard = unnamed" en su archivo .vimrc hace que el portapapeles del sistema sea el típico. De hecho, utilicé github.com/adamv/homebrew/blob/duplicates/Library/Formula/… esta fórmula homebrew para compilarla y compilarla.
rado
Hmm, no estoy seguro de por qué Vim no apareció en mi Homebrew, pero lo copié a / usr / local / Library / Formula, ejecuté brew install vim, y falló con "ld: biblioteca no encontrada para -lruby-static ". Estoy usando RVM y estaba en 1.8.7. Cuando cambié a 1.9.2 el error fue "ld: biblioteca no encontrada para -lruby.1.9.1". La solución fue usar el sistema Ruby ejecutando primero el sistema de uso rvm.
Justsee
99
Un poco más fácil que buscar la palabra "portapapeles" en lo que suele ser una larga lista de características: hacer :echo has("clipboard"). Si muestra 0, no está compilado. Si muestra 1, lo es.
ravron
3
También puede obtener vim compilado con portapapeles usando homebrew: brew install vim
Anton Koval '28 de
44
¡Tener cuidado! Tenía una +clipboardversión, pero había instalado lo --with-client-serverque permite +x11, e intentar copiar / pegar en x11 en terminal vim en macOS no funcionó :) Tuve que reinstalar sin +clientserver.
jacwah
96

Puede seleccionar visualmente el texto y escribir :w !pbcopy<CR>

O puede incluir las asignaciones de teclas a continuación en su ~/.vimrcarchivo. Cortan / copian texto en modo visual en el portapapeles del sistema operativo.

vmap <C-x> :!pbcopy<CR>  
vmap <C-c> :w !pbcopy<CR><CR> 

fuente: http://drydevelopment.com/blog/vim-pbcopy-on-os-x

usuario242065
fuente
66
También puede seleccionar texto de la línea de comando como: 1,10w! Pbcopy para copiar las líneas 1-10 en el portapapeles. La w es importante junto con el espacio posterior para mantener el texto original en su lugar. El enlace de origen anterior ahora está roto, pero hay una discusión aquí: vim.wikia.com/wiki/Mac_OS_X_clipboard_sharing
sdjuan
Seguí esto para que esto funcionara en tmux: superuser.com/questions/231130/…
Wex
@Wex Link ha sido arreglado
SnoringFrog
2
Tenga en cuenta que esto parece funcionar solo para seleccionar líneas enteras. No parece funcionar si solo desea seleccionar parte de una línea. stackoverflow.com/questions/16196826/…
Kevin Wheeler
1
@Kevin Wheeler: puede intentar con el siguiente comando que puede resolver el noremap de copia no lineal <silent> <leader> y: <CR>: let @ a = @ "\ | execute" normal! vgvy "\ | let res = system (" pbcopy ", @") \ | let @ "= @ a <CR>
dragonxlwang
38

comillas dobles con asterisco ( "*) antes de que cualquier comando de extracción arroje los resultados al búfer de copia. Eso también funciona para Windows y Linux.

Paul Tomblin
fuente
11
simplemente parece emitir un carácter de campana y no tiene otro efecto para mí
Marıu
3
En X11, "* es PRIMARIO" de Vim, + es CLIPBOARD y SECUNDARIO no obtiene un registro con nombre. (No es que nadie lo use ...)
ephemient
Perfectamente. Realmente ayuda, especialmente con la selección de bloque (ctrl-v).
Sonique
Como la pregunta era específicamente sobre Mac OS X, agregar que funciona para Mac "también" es innecesario.
Paul Tomblin
@PaulTomblin está bien, es justo :-)
apprenticeDev
26

En macos 10.8, se compila vim, por -clipboardlo que deberá "*yvolver a compilar. Afortunadamente brew install vimcompilaría una nueva versión fácilmente para usted y lo será +clipboard.

nikola
fuente
1
Algo a tener en cuenta, bastante extraño, brew install vimcon actualizaciones vi, y no vim . Por lo tanto, es posible que deba alias las cosas de manera diferente después de instalar vim con homebrew.
shridharama el
18

Seleccione visualmente el texto y escriba:

ggVG
!tee >(pbcopy)

Lo cual me parece más agradable que:

ggVG
:w !pbcopy

Como no muestra un mensaje: "Presione ENTRAR o escriba el comando para continuar"

James Scriven
fuente
Todavía copia toda la línea
Karl Pokus
11

Si está utilizando MacPorts, puede actualizar su VIM para incluir el soporte del portapapeles a través de:

port install vim +x +x11

Ahora usa el "+registro para tirar su texto directamente a su portapapeles de Mac. Funciona de maravilla.

Matt Hughes
fuente
1
Esto es justo lo que necesitaba. Uno solo necesita asegurarse de que $ PATH sea correcto y que obtenga / opt / local / bin / vim no Apple vim.
Gareth
8

Si estás en MacOS X:

$ brew install vim
$ vim --version
VIM - Vi IMproved 7.4 [...]

Luego, agregue a su .vimrc:

set clipboard=unnamed

Ahora solo necesita estar en vim and do :%y, para tener todo el contenido copiado en su portapapeles.

Jose Alban
fuente
el contenido es eliminado pero no puedo pegarlo fuera de VIM.
prayagupd
5

Use vim de Homebrew :brew install vim

Mac (a partir de 10.10.3 Yosemite) viene preinstalado con un sistema vim que no tiene clipboardhabilitado el indicador.

Puede compilar vim por usted mismo y habilitar ese indicador, o simplemente usar el vim de Homebrew que está configurado correctamente.

Para ver esto por sí mismo, consulte el sistema de inventario vim con /usr/bin/vim --version

Verás algo como:

$ /usr/bin/vim --version

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov  5 2014 21:00:28)
Compiled by [email protected]
Normal version without GUI.  Features included (+) or not (-):
... -clientserver -clipboard +cmdline_compl ...

Nota la -clipboard

Con vim de homebrew en su lugar obtienes

$ /usr/local/bin/vim --version

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled May 10 2015 14:04:42)
MacOS X (unix) version
Included patches: 1-712
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
... +clipboard ...

Nota la +clipboard

Evan
fuente
1
Entonces, ¿cómo hacer la copia?
Frozen Flame
con la versión de cerveza de vim que era capaz de hacer lo que quería: destaqué las líneas utilizando Vcontinuación, :w !pbcopyy funcionó
davidpm4
5

Si su Vim no está compilado con portapapeles, desea copiar el texto seleccionado en lugar de líneas completas, no desea instalar MacVim u otra GUI, la solución más simple es agregar esta línea a su .vimrc:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

Para usarlo, simplemente seleccione visualmente el texto que desea copiar y luego Control- C. Si desea una explicación completa de esta línea, lea " Cómo copiar al portapapeles en vim ".

Songz
fuente
pero también me da 2 líneas negras después de copiar el texto
Nic Wanavit
4

Solía:

map <C-x> :!pbcopy<CR>
vmap <C-c> :w !pbcopy<CR><CR>

Funcionó muy bien.

usuario3133576
fuente
3

Puede usar MacVim cuando esté en una Mac para acceder fácilmente al portapapeles utilizando las teclas estándar del sistema operativo.

También es totalmente compatible con versiones anteriores de Vim normal, por lo que ni siquiera tengo que tener un separado .vimrc.

matpie
fuente
Uso MacVim y luego vinculé los sinónimos vim de la línea de comandos en mi ~/binpara anular los valores predeterminados.
The Tin Man
2

comando-C? Esto al menos funciona para el vim lanzado desde dentro de Terminal.app para el texto seleccionado con el mouse.

Mouviciel
fuente
66
buena respuesta ingenua pero la producción se rompe si está utilizando sub-ventanas dividido verticalmente en vim (que es realmente el caso que tengo en mente), o si el resultado es superior a una pantalla del terminal
ʞɔıu
3
Tienes razón, no pensé en estos casos. Dejo mi respuesta solo para evitar que otros den respuestas similares no útiles.
Mouviciel
2

Fakeclip implementa los buffers +y *si no son compatibles de forma nativa.

redactado
fuente
2

Mi principal problema era la versión OSX predeterminada de Vim. Instalarlo a través de homebrew agregado+clipboard a la compilación.

Puedes consultar con:

vim --version

para ver si dice -clipboardo +clipboard.

frbl
fuente
2

si tiene la +clipboardopción en su instalación de Vim (puede consultar con :version) y está en modo visual, puede hacerlo "+yEsto arrastrará la selección al búfer +que es el portapapeles.

He agregado los siguientes mapas a mi vimrc y funciona bien.

vmap <leader>y "+y : Con esto puedo leader keyseguir ypara copiar en el portapapeles en modo visual.

nmap <leader>p "+p : Con esto puedo leader keyseguir ppara pegar desde el portapapeles en modo normal.

PD: En Ubuntu tuve que instalar vim-gtk para obtener la +clipboardopción.

Andrés Hazard
fuente
0

en mac cuando parece que algo más funciona: seleccione con el mouse, haga clic con el botón derecho y elija copiar. uff

tom
fuente
0

Actualmente estoy en OS X 10.9 y mis esfuerzos para compilar vim con + xterm_clipboard no me dieron nada. Entonces, mi solución actual es usar MacVim en modo terminal con opción set clipboard=unnameden mi archivo ~ / .vimrc. Funciona perfecto para mi.

Yaroslav Melnichuk
fuente
0

Lo que funcionó para mí en mi .vimrc

set clipboard=unnamed
if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
endif
maged
fuente
0

Para Mac: mantener optionpresionada la tecla seguida de ctrl Vmientras seleccionaba el texto hizo el truco.

markroxor
fuente
0

Shift cmd c: establecer el modo de copia Arrastre el mouse, seleccione el texto, cmd c para copiar el texto seleccionado Cmd v para pegar

user518066
fuente
-1

Para los usuarios de Ubuntu, el paquete que desea recuperar para usar el portapapeles está lleno de vim. Los otros paquetes (vim-tiny, vim) no incluyen la función del portapapeles.


fuente
vim-full ya no es un nombre de paquete ubuntu. el paquete vim predeterminado (7.3.154) tiene un conjunto mínimo de características, incluido -clipboard. Instalar vim-gtk o vim-nox proporcionará una versión + portapapeles.
spazm
-1

¿Copiar al portapapeles usando el registro '+' o '*' no funciona?

Motivo: su versión particular de vim se compiló sin compatibilidad con el portapapeles. Escriba vim --verion en la consola y verá -xterm_clipboard . Instalar vim con paquetes gui resuelve este problema. En ubuntu puedes hacer esto escribiendo en shell:

sudo apt-get install vim-gui-common

Ahora nuevamente haga vim --version en la consola. ¡Lo más probable es que veas + xterm_clipboard ahora!

Entonces, ahora puede copiar cualquier cosa al portapapeles usando el registro + (como "+ yy para copiar la línea actual al portapapeles)

VineetChirania
fuente
-1

Me encuentro con el mismo problema, después de que la instalación macvimaún no funciona, finalmente encontré una manera de resolver:

Intente desinstalar todo vim primero,

brew uninstall macvim

brew uninstall --force vim

y reinstalar macvim

brew install macvim --with-override-system-vim

Entonces puedes usar "*yo "+y, no tienes queset clipboard=unnamed

Bruce
fuente
-2

Command-c funciona para mí tanto en MacVim como en la terminal.

Matt Williamson
fuente
Copiar y pegar tradicional no funciona con las memorias intermedias de Vim y puede dañar completamente su formato. Por ejemplo, copiar 15 líneas de objetos anidados con Cmd + C y luego pegar con Cmd + V hará que pierda la comprensión de la anidación. Es muy probable que esto dependa de su configuración en su .vimrc y puede ser muy particular
netpoetica