¿Cómo copiar entre terminales?

11

Estoy usando el sistema Linux. Se abren dos vims en dos terminales. Ahora me gustaría copiar texto de A a B. Una forma de hacerlo es seleccionar texto en A, usar el mouse para copiar, luego cambiar a B, en el modo de inserción, el comando <c-r>+pegará el texto.

¿Hay alguna forma de hacerlo sin usar el mouse? como "+yyen A, cuando cambias a B o<c-r>+,? Exploré un par de combinaciones en vano. Y busqué "copiar a través de terminales", pero no encontré nada.

@statox usuario sugiere una solución usando el modo visual, es decir, v$"+yen A, cuando el interruptor a B, o<c-r>+.

¿Hay alguna forma simple de copiar el texto en A sin entrar en modo v? Es cierto que entrar en modo v no implica demasiados golpes de tecla, solo pregúntate si hay una mejor manera. P.ej. si el cursor está en el medio de una línea, yycopia la línea completa (para registrarse "), mientras 0v$yhace lo mismo con una pulsación de tecla adicional.

O bien, mi pregunta se puede reducir a si hay alguna forma con menos pulsaciones de teclas que 0v$"+ypara copiar de manera que pueda usar <alt-tab>o<c-r>+para pegar.

usuario3813057
fuente
¿Cuál es tu problema exacto? Parece que tiene la solución: seleccione su texto con el modo visual (¿por qué usaría el mouse?) Colóquelo en el registro del portapapeles "+yy, en la otra instancia de vim, coloque el registro del portapapeles "+p. O duplicado de esto ?
statox
No tiene que ingresar al modo visual para tirar de algo. Puedes seguir ycon un movimiento ( :help motion.txt) o un objeto ( :help object-select). Si tira y pega a través de las instancias de Vim a menudo, puede encontrar esa configuración clipboardpara incluir unnamedo unnamedplusútil. Ver :help 'clipboard'. Luego, copiar entre instancias debería funcionar.
garyjohn
1
El punto de mi comentario no fue el modo visual, en realidad tengo problemas para entender su problema: al principio pensé que era el hecho de copiar parte del texto de un terminal a otro, ahora parece que se trata de usar la menor cantidad de teclas posibles. posible tirar en el registro del portapapeles. Si ese es el segundo caso, el comentario de Garyjohn es relevante.
statox
1
0v$es el mismo que V. Y es fácil de hacer una asignación para "+y: :nnoremap <Leader>y "+y. Entonces eso lo reduce a V\y.
Martin Tournoij
@Carpetsmoker su solución es buena. Me gustaría tomarlo como la solución óptima si lo pega en la región de respuesta. Parece que sin un mapa de teclas, lo mejor que podemos hacer para la copia en mi pregunta es V"+y, 4 pulsaciones de teclas.
user3813057

Respuestas:

9

Puede verificar si Vim está construido con soporte para portapapeles con:

:echo has('clipboard')

Si el resultado es 1, lo siguiente debería ser suficiente para lograr su objetivo:

"*y    in source Vim
"*p    in destination Vim

Puede hacerlo todo mucho más sencillo sincronizando el registro del portapapeles y el registro predeterminado con esta configuración en su vimrc:

set clipboard^=unnamed

Si la salida de :echo has('clipboard')es 0, considere instalar un Vim apropiado como vim-gtko vim-gnome(el nombre del paquete puede diferir de una distribución a otra).

romainl
fuente
1

Creo que la solución que ya mencionas en tu pregunta es la correcta. Si desea reducir la cantidad de pulsaciones de teclas, simplemente puede crear un mapa, p. Ej.

vmap <leader>y "+y
vmap <leader>d "+d
nmap <leader>p "+p
nmap <leader>P "+P
vmap <leader>p "+p
vmap <leader>P "+P

Vea la segunda entrada aquí .

Karl Yngve Lervåg
fuente
1

Para ampliar la respuesta de @ romainl, (con soporte para portapapeles) puede usar registros que se comparten con el portapapeles de todo el sistema.

"+y    To yank/copy from a vim-terminal
"+p    To paste in destination vim-terminal

"*y    To yank/copy from a vim-terminal
"*p    To paste in destination vim-terminal

Mediante la ejecución de estos comandos, que son y Anking / copiar / almacenamiento de contenidos seleccionados en los registros, y p asting a destino Vim-terminal. Estos dos registros especiales +y *se comparten con el portapapeles de todo el sistema (y, por lo tanto, muchos otros programas como el navegador web, gedit, etc.). El registro +está asociado con el búfer de copiar / pegar y *está asociado con el búfer de selección (uno que inserta una copia de la selección con un clic central en un campo de texto en, digamos, Ubuntu) y se puede pegar usando ctrl + v( ctrl + shift + ven gnome-terminal).

0xc0de
fuente
1

1) En Fedora utilizo la siguiente configuración:

dnf install vim-X11

vim-X11 viene con soporte para portapapeles; tal vez en otras distribuciones sea similar.

2) Establecer un alias en mi .bashrc

alias vim="vimx"

3) En .vimrc:

set clipboard=unnamedplus

Ahora el tirón habitual en Vim va al portapapeles del sistema y cada Ctrl-C fuera de vim se puede pegar en vim.

Neaţu Ovidiu Gabriel
fuente
0

Si está usando un Mac (OS X), puede instalar bpcopy (usando cerveza instalar pbcopy --ver http://brew.sh/ para más detalles). Luego ejecute lo siguiente (línea de comando de forma recta) sin tocar el mouse:

EJEMPLO:

1) En la TERMINAL # 001 :

cat /tmp/stuff.txt | pbcopy

2) Puede cambiar al terminal # 002 (sin usar el mouse) usando las teclas de acceso rápido integradas en la aplicación de terminal de OSX: command+i

3) En TERMINAL # 002 : Abra el nuevo archivo en vim

vi newfile

4) Ponga vim en modo de inserción coni

5) Inserte el texto del portapapeles con command+ V(para pegar desde el portapapeles en una Mac)

6) ¡Disfruta el resto de tu día!

Joe Choosakul
fuente