Saltar al contenido

¿Cómo “copiar al portapapeles” en vim de Bash en Windows?

Si hallas algún problema con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes añadir el código al proyecto final.

Solución:

Dado que ni “* y ni” + y (…) funcionan, una alternativa es la siguiente:

Agregue esto a su .vimrc y crea un archivo llamado ~/.vimbuffer

" copy (write) highlighted text to .vimbuffer
vmap  y:new ~/.vimbufferVGp:x | :!cat ~/.vimbuffer | clip.exe 
" paste from buffer
map  :r ~/.vimbuffer

Resalta cualquier texto usando visual o visual-block y presiona ctrl-c. Pegue el texto copiado fuera de su terminal usando el método habitual o pegue el texto copiado en cualquier panel de vim usando ctrl-v en modo normal o visual.

Ctrl-c tira el texto seleccionado, sobrescribe ~/.vimbuffer con el texto seleccionado, ejecuta un comando UNIX para canalizar los datos desde ~/.vimbuffer a clip.exe.

¡Cualquier mejora adicional (por ejemplo: silenciar el comando) es muy apreciada!

Editar:
El comando ahora puede copiar cadenas con cualquier longitud, no solo líneas completas. Comando antiguo:

vmap :w! ~/.vimbuffer | !cat ~/.vimbuffer | clip.exe

Para copiar al portapapeles desde vim en Bash en Windows 10, mantenga presionado Shift y arrastre el cursor sobre el texto. entonces presione enter

Una selección debería verse así antes de presionar enter:

La selección debería verse así antes de presionar ENTER

EDITAR: Esto solo funciona con texto que cabe en la pantalla de una vez; no se puede utilizar para copiar bloques de texto que abarcan muchas ‘pantallas’

Si no desea configurar un servidor X, este método le permitirá copiar el texto seleccionado a su portapapeles usando el clip.exe programa que viene con Windows.

Los siguientes fragmentos de código se pueden colocar en su .vimrc Archivo.

Primero cree una función auxiliar que devolverá el texto seleccionado actualmente como un string. Podemos usar esta función para canalizar texto resaltado en clip.exe:

func! GetSelectedText()
    normal gv"xy
    let result = getreg("x")
    return result
endfunc

El system La función nos permitirá llamar a programas nativos y canalizar parámetros en ellos. El siguiente fragmento configura dos key mapeos; la primera línea permitirá control+C que se utilizará para copiar texto y el segundo permitirá control+X para cortar texto:

noremap  :call system('clip.exe', GetSelectedText())
noremap  :call system('clip.exe', GetSelectedText())gvx

Después de guardar los cambios en su .vimrc archivo, debería estar listo para comenzar.

Si va a utilizar su .vimrc en varios sistemas, sugiero envolver estas asignaciones en un if declaración para comprobar si clip.exe realmente existe:

if !has("clipboard") && executable("clip.exe")
    noremap  :call system('clip.exe', GetSelectedText())
    noremap  :call system('clip.exe', GetSelectedText())gvx
endif

Lo anterior también permitirá que Vim ignore esos key enlaces si tiene acceso directo al portapapeles del sistema.

Es posible que también desee agregar combinaciones de teclas para cuando vim tenga acceso al portapapeles, así:

if has("clipboard")
    vnoremap  "+x
    vnoremap  "+x

    vnoremap  "+y
    vnoremap  "+y

    map        "+gP
    map       "+gP

    cmap       +
    cmap      +
endif

Lo cual será útil si está usando Vim de forma nativa en Windows o si está usando vim-gtk en un sistema Linux.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *