una - vim modo ex
¿Cómo hacer pegar vim desde(y copiar en) el portapapeles del sistema? (24)
Linux
En mi sistema Linux, los registros +
y *
asignan a una selección X11, que se puede pegar con el botón central del mouse. Cuando se usan :set clipboard=unnamed
y :set clipboard=unnamedplus
, los registros se asignan al portapapeles y se pueden pegar con CTRL-V.
Los detalles específicos parecen depender de la configuración y del sistema, por lo que su millaje definitivamente variará. Sin embargo, definitivamente debería hacer que apuntes en la dirección correcta.
Ver también
A diferencia de otros editores, vim almacena texto copiado en su propio portapapeles. Por lo tanto, es muy difícil para mí copiar un texto de una página web y pegarlo en el archivo de trabajo actual. Sucede que tengo que abrir gedit o escribirlo manualmente.
¿Puedo hacer pegar vim desde y hacia el portapapeles del sistema?
Basado en la respuesta de @ lis2, uso una configuración más simple que no forzará el modo Insertar al final:
" Copy and paste
if has(''clipboard'') && !has(''gui_running'')
vnoremap <C-c> "+y
vnoremap <C-x> "+d
vnoremap <C-v> "+p
inoremap <C-v> <C-r><C-o>+
endif
Tenga en cuenta que todas estas asignaciones de Vim predeterminadas anulan:
-
v_CTRL-C
: detener modo Visual -
v_CTRL-X
: restar [cuenta] del número -
v_CTRL-V
: modo visual en bloque -
i_CTRL-V
: inserte literalmente el siguiente no-dígito, que también se asigna ai_CTRL-Q
Como alternativa, se pueden usar teclas inspiradas en el "yank", "delete" y "put" Vim verbos: <Cy>
, <Cd>
y <Cp>
respectivamente. Estos solo anularían una asignación predeterminada:
-
i_CTRL-P
: búsqueda hacia atrás para completar la palabra clave
Creo que esta pregunta merece una respuesta más objetiva.
Entrando en el modo de pegado
- ESC
- : establecer pegar
- presiona i
- MAYÚS + Insertar (con un texto copiado en su portapapeles)
Saliendo del modo pegar
- ESC
- : Set Nopaste
- presiona i
Usted pegó el texto y puede escribir de nuevo.
Cuando uso mi vim de Debian que no está integrado con Gnome (vim --version | grep clip # no muestra compatibilidad con el portapapeles), puedo copiar al portapapeles después de mantener presionada la tecla Mayús y seleccionar el texto con el mouse, como con cualquier Otro programa de curses. Como pensé a partir de un comentario de @Conner, es el terminal (gnome-terminal en mi caso) el que desactiva el informe de eventos del mouse cuando detecta la pulsación de Shift. Supongo que los programas basados en curses pueden recibir eventos del mouse después de enviar una determinada secuencia de Escape al terminal.
En la parte superior de la configuración :set clipboard=unnamed
, debe usar mvim -v
que puede obtener con brew install macvim
si está usando vim en Terminal.app en Mac OS X 10.9. El vim predeterminado no admite la opción del portapapeles.
Estas serían las líneas que necesita en su vimrc para este propósito:
set clipboard+=unnamed " use the clipboards of vim and win
set paste " Paste from a windows or from vim
set go+=a " Visual selection automatically copied to the clipboard
Esto funciona para mí: Ctrl + Shift + V
Hay dos formas simples de hacer esto. Haga su archivo en modo de inserción y 1) presione el botón central (la rueda de desplazamiento) en su mouse, o 2) Ctrl + Shift + V
La solución más simple para esto, que también funciona entre diferentes máquinas Linux a través de ssh
es:
Compruebe si vim es compatible con el portapapeles X-11:
vim --version | grep clipboard
vim --version | grep clipboard
. Si reporta back-clipboard
y-xterm_clipboard
, debe instalarvim-gtk
ovim-gnome
(gvim en arch linux)Añade las siguientes líneas a tu
.vimrc
:
set clipboard=unnamedplus set paste
- Si inicia sesión en una máquina diferente a través de ssh, use la opción -Y:
ssh -Y machine
Ahora, copiar y pegar debería funcionar exactamente como se espera en una sola máquina, y en diferentes máquinas usando solo y
para yank p
para pegar. NB modifique .vimrc
en todas las máquinas donde quiera usar esta función.
Las otras soluciones son buenas si desea cambiar su vimrc, etc ... Sin embargo, quería una forma sencilla de copiar desde vim a mi teclado de sistema. Esto es lo que se me ocurrió.
- Seleccione el texto que desea copiar con el modo visual
v
- Presione
:
(se expandirá automáticamente para mostrar:''<,''>
) - Escriba
y *
oy +
(dependiendo de su sistema) para jalar el texto seleccionado al portapapeles del sistema
Lo que realmente necesitas es EasyClip . Hará eso y mucho más ...
Los registros "*
y "+
son para el portapapeles del sistema ( :help registers
). Dependiendo de su sistema, pueden hacer cosas diferentes. Por ejemplo, en sistemas que no usan X11 como OSX o Windows, el registro "*
se usa para leer y escribir en el portapapeles del sistema. En los sistemas X11 se pueden usar ambos registros. Consulte :help x11-selection
para obtener más detalles, pero básicamente el "*
es análogo a la selección PRIMARIA de X11 (que generalmente copia las cosas que selecciona con el mouse y pega con el botón central del mouse) y "+
es análogo a la selección CLIPBOARD de X11 (que es el portapapeles propiamente dicho).
Si todo eso pasó por tu cabeza, intenta usar "*yy
o "+yy
para copiar una línea en el portapapeles de tu sistema. Suponiendo que tiene las opciones de compilación adecuadas, una u otra debería funcionar. Es posible que desee volver a asignar esto a algo más conveniente para usted. Por ejemplo, puede colocar vnoremap <Cc> "*y
en su ~ / .vimrc para que pueda seleccionar visualmente y presionar Ctrl + c para jalar al portapapeles de su sistema.
Tenga en cuenta que copiar / pegar desde el portapapeles del sistema no funcionará si :echo has(''clipboard'')
devuelve 0. En este caso, vim no se compila con la función +clipboard
y tendrá que instalar una versión diferente o recompilar eso. Algunas distribuciones de Linux proporcionan una instalación mínima de vim de forma predeterminada, pero en general, si instala el paquete vim-gtk
, puede obtener las funciones adicionales.
También puede querer echar un vistazo a la opción ''clipboard''
descrita en :help cb
. En este caso, puede :set clipboard=unnamed
o :set clipboard=unnamedplus
para hacer que todas las operaciones de eliminación / borrado se copien automáticamente en el portapapeles del sistema. Esto podría ser un inconveniente en algunos casos en los que está almacenando otra cosa en el portapapeles, ya que la anulará.
Para pegar puede usar "+p
o "*p
(nuevamente, dependiendo de su sistema y / o selección deseada) o puede asignar estos a otra cosa. Los escribo explícitamente, pero a menudo me encuentro en el modo de inserción. Si está en el modo de inserción, aún puede pegarlos con la sangría adecuada usando <Cr><Cp>*
o <Cr><Cp>+
. Ver :help i_CTRL-R_CTRL-P
.
También vale la pena mencionar la opción de paste
de vim ( :help paste
). Esto coloca a vim en un "modo de pegado" especial que deshabilita otras opciones, lo que le permite pegar fácilmente en vim usando su emulador de terminal o el método abreviado de pegado del multiplexor. Simplemente escriba :set paste
para habilitarlo, pegue su contenido y luego escriba :set nopaste
para deshabilitarlo. Alternativamente, puede usar la opción pastetoggle
para configurar un código :help pastetoggle
el modo ( :help pastetoggle
). Recomiendo el uso de registros en lugar de estas opciones, pero si aún son demasiado atemorizantes, esta puede ser una solución conveniente mientras perfecciona sus chuletas vim.
Ver :help clipboard
para obtener información más detallada.
No tenía + portapapeles, así que se me ocurrió esta solución alternativa utilizando xsel:
Añadir a tu ~ / .vimrc:
vnoremap <CC> :w !xsel -b<CR><CR>
Para algunos teclados internacionales, es posible que deba presionar " + Espacio para obtener "
.
Entonces, en ese caso, tendrías que presionar " Espacio + yo " Espacio * y para copiar.
Y " Space + p o " Space * p para pegar.
Para mi esa configuración funciona para copiar y pegar
" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
Probé las sugerencias anteriores y ninguna de ellas funcionó en mi entorno. (Windows PuTTY clon sobre ssh)
Aparecieron algunas búsquedas en Google adicionales: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard
Uno de los comentarios sugirió usar SHIFT+INSERT
que sirvió para pegar desde el portapapeles de mi escritorio al búfer de Vim. Ctrl-C
ya estaba trabajando para copiar en el portapapeles del escritorio desde Vim.
Puedes copiar en vim mediante el acceso directo de gnome-terminal para pegar. Hacer el archivo en modo insertar y usar.
Ctrl + Shift + v .
Recuerda de antemano a
:set paste
Para evitar meterse con la hendidura.
Si está en Windows y desea pegar el contenido del portapapeles del sistema usando p
, escriba este comando.
:set clipboard = unnamed
Esto solucionó mi problema.
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.
Si está utilizando un ratón primero haga
:set paste
Luego right click mouse
y los contenidos en el búfer se pegarán.
Siguiendo con la respuesta de Conner, que fue genial, pero CR Cp +
y CR Cp *
en modo de inserción es un poco inconveniente. Ditto "*p
y "+p
desde el modo de comando.
un gurú de VIM sugirió lo siguiente para asignar Cv
a lo que hace Cr Cp +
.
Podría tener
:inoremap <Cv> <Co>"+p
para el modo de inserciónsi realmente quisiera anular el modo visual de bloques (no recomendado por él, ya que el modo visual es bueno) podría tener el
map <Cv> "+p
También puede valer la pena mencionar que, en OSX con Vim, puede seleccionar texto con el mouse, Cmd-C para copiar al portapapeles del sistema OSX, y el texto copiado estará disponible en el portapapeles fuera de Vim.
En otras palabras, OSX lo trata como si fuera una ventana normal, y aquí es donde el muy mal presionado botón "Comando" de Apple es muy útil.
B-30
Una nota rápida para las personas cuya instalación de vim no admite los registros * y +. No es necesario descargar una nueva instalación de vim para pegar desde el portapapeles. Aquí hay un método alternativo:
1) Instale parcellite (un administrador de portapapeles con una huella de memoria baja);
2) En su archivo .vimrc, agregue lo siguiente:
command Clip r !parcellite -c
3) Reinicie vim.
Ahora, cuando escribe: Clip como un comando ex, los contenidos del portapapeles se pegarán en el cursor. También puede asignar el nuevo comando a una tecla de función para poder hacer esto con solo presionar una tecla.
portapapeles
Hay un registro especial para almacenar esta selección, es el "* registro. No se pone nada aquí a menos que la información sobre qué texto se seleccione esté a punto de cambiar (por ejemplo, con un clic con el botón izquierdo del ratón en alguna parte), o cuando otra aplicación quiera pegue el texto seleccionado. Luego el texto se pone en el registro "*. Por ejemplo, para cortar una línea y convertirla en la selección actual / colocarla en el CLIPBOARD:
"*dd
De manera similar, cuando desea pegar una selección de otra aplicación, por ejemplo, al hacer clic en el botón central del ratón, la selección se coloca en el "* registro primero, y luego se pone" poner "como cualquier otro registro. Por ejemplo, para colocar la selección (contenidos del CLIPBOARD):
"*p
registros E354
> There are nine types of registers:
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~
> 8. The black hole register "_
> 9. Last search pattern register "/
Pegar desde el portapapeles
1. Clipboard: Copy
2. Vim insertmode, middle mouse key
Compruebe si hay soporte para el portapapeles X11 en el terminal
Cuando te gusta ejecutar Vim en un terminal, debes buscar una versión de Vim que haya sido compilada con soporte para portapapeles. Verifique la compatibilidad con el portapapeles X11, desde la consola, escriba:
% vim --version
Si ves "+ xterm_clipboard", estás listo para ir.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
El servidor X mantiene tres selecciones, llamadas:
PRIMARIA, SECUNDARIA Y CLIPBOARD
La selección PRIMARIA se usa convencionalmente para implementar copiar y pegar a través del botón central del ratón. Las selecciones de SECUNDARIO y CLIPBOARD se usan con menos frecuencia por los programas de aplicación.