Definire comandi personalizzati per i registri * e +


9

Se sto usando una build di Vim con la xterm_clipboardfunzione, il contenuto degli appunti di sistema è disponibile attraverso il +registro.

Se la build che sto usando non ha questa funzione, posso fare in modo che il "+registro chiami i miei programmi personalizzati per recuperare e impostare gli appunti di sistema ( xsel -boe xsel -bi, o allo stesso modo con xclip)? Allo stesso modo con "*per chiamare xsel -poe xsel -pi.

Il punto è poter digitare qualcosa del genere "+psenza doversi preoccupare se la funzione è disponibile. Digitando :r !xsel -b<Enter>non è quello che sto cercando: voglio le stesse combinazioni di tasti per il lavoro, e voglio la pasta varianti di seguire ciò che è disponibile per i registri di “veri” ( P, gp, ...).

Bonus: posso definire comandi personalizzati per altri nomi di registro?

Risposte:


7

Alcune <expr>mappature dovrebbero essere in grado di fare il lavoro qui. La struttura di base sarebbe

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)

La funzione avrebbe bisogno di essere ampliato per gestire tutte le varianti di p, P, gp, ecc ma questo dovrebbe essere un buon inizio.


Questo sembra essere sulla strada giusta, ma non funziona. Un semplice p(senza un "nome precedente e di registro) non fa altro che far "papparire nella riga di stato. "apequivale a a, "bpbip, ... non capisco la logica. "+emette immediatamente un segnale acustico, non riesco nemmeno a dire che intendo +o *come nome di registro.
Gilles 'SO- smetti di essere malvagio' il

1
Supponendo che questi problemi fondamentali siano risolti, esiste un elenco esaustivo di comandi che dovrei scavalcare? Il set sembra scoraggiante, soprattutto se voglio supportare anche lo strattone.
Gilles 'SO- smetti di essere malvagio' il

@Gilles Aggiornato per correggere il comportamento con registri non - + / *. Il problema con "+quando il tuo vim -xterm_clipboardè più difficile perché non arriva mai a questa funzione. Se si specifica un registro non valido ( +), il comando viene interrotto. Quindi, sembra che il comportamento debba effettivamente essere invertito, quindi mappare "+o "*e quindi gestire il comando specificato dall'utente ...
jamessan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.