Defina comandos personalizados para los registros * y +


9

Si estoy usando una compilación de Vim con la xterm_clipboardfunción, el contenido del portapapeles del sistema está disponible a través del +registro.

Si la compilación que estoy usando no tiene esta función, ¿puedo hacer que el "+registro llame a mis programas personalizados para recuperar y configurar el portapapeles del sistema ( xsel -boy xsel -bi, o de la misma manera xclip)? Asimismo con "*llamar xsel -poy xsel -pi.

El punto es poder escribir algo así "+psin tener que preocuparse si la función está disponible. Tipificación :r !xsel -b<Enter>no es lo que estoy buscando: Quiero las mismas pulsaciones de teclas para el trabajo, y quiero la pasta variantes de seguir lo que está disponible para los registros de “verdaderos” ( P, gp, ...).

Bonificación: ¿puedo definir comandos personalizados para otros nombres de registro?

Respuestas:


7

Algunos <expr>mapas deberían poder hacer el trabajo aquí. La estructura básica sería

function! ClipboardOrXclip(command, register)
    if a:register !~ '[+*]' || has('xterm_clipboard') || has('gui_running')
        " Just return the original command if the clipboard is accessible
        " or it's not a register that should be handled by xsel
        return a:command
    endif
    if a:register == '+'
        return "<Esc>:r !xsel -bo<CR>"
    else
        return "<Esc>:r !xsel -po<CR>"
    endif
endfunction

nnoremap <silent> <expr> p ClipboardOrXclip('p', v:register)

Tendría la función de ser ampliado para manejar todas las variaciones de p, P, gp, etc, pero esto debe ser un comienzo bueno.


Esto parece estar en el camino correcto, pero no está funcionando. Un simple p(sin un "nombre de registro y precedente ) no hace nada más que make "paparece en la línea de estado. "apes equivalente a a, "bppitidos, ... No entiendo la lógica. "+suena inmediatamente, ni siquiera puedo decir que me refiero +o *como un nombre de registro.
Gilles 'SO- deja de ser malvado'

1
Suponiendo que se resuelvan estos problemas fundamentales, ¿hay una lista exhaustiva de comandos que deba anular? El conjunto se ve desalentador, especialmente si quiero soportar el tirón también.
Gilles 'SO- deja de ser malvado'

@Gilles Actualizado para corregir el comportamiento con registros que no son + / *. El problema con "+cuándo vim tiene -xterm_clipboardes más difícil porque nunca llega a esta función. Al especificar un registro no válido ( +) se cancela el comando. Por lo tanto, parece que el comportamiento tiene que ser hecho de manera invertida mapear el "+o "*y luego manejar la orden especificada por el usuario ...
jamessan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.