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
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
:
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.