Zdefiniuj niestandardowe polecenia dla rejestrów * i +

9

Jeśli używam kompilacji Vima z tą xterm_clipboardfunkcją, zawartość schowka systemowego jest dostępna poprzez +rejestr.

Jeśli kompilacja, której używam, nie ma tej funkcji, czy mogę wywołać "+rejestr wywołujący moje niestandardowe programy, aby pobrać i ustawić schowek systemowy ( xsel -boi xsel -bipodobnie z xclip)? Podobnie z, "*aby zadzwonić xsel -poi xsel -pi.

Chodzi o to, aby móc wpisać coś takiego, "+pbez martwienia się, czy funkcja jest dostępna. Wpisanie :r !xsel -b<Enter>nie jest to, czego szukam: chcę tych samych klawiszy do pracy, a ja chcę pasta warianty śledzić, co jest dostępne dla „prawdziwych” rejestrów ( P, gp...).

Bonus: czy mogę zdefiniować niestandardowe polecenia dla innych nazw rejestrów?

Gilles „SO- przestań być zły”
źródło

Odpowiedzi:

7

Kilka <expr>mapowań powinno być w stanie wykonać zadanie tutaj. Podstawowa struktura byłaby

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)

Funkcja musiałaby być rozszerzony do obsługi wszystkich odmian p, P, gp, itd., Ale powinno to być dobry początek.

jamessan
źródło
To wydaje się być na dobrej drodze, ale nie działa. Zwykły p(bez "nazwy poprzedzającej i rejestru) nie robi nic innego niż make "ppojawia się w linii statusu. "apjest równoważne a, "bpdźwięki, ... I nie zrozum logikę. "+natychmiast wyemituje sygnał dźwiękowy, nawet nie powiem, że mam na myśli +ani *jako nazwa rejestru.
Gilles „SO- przestań być zły”
1
Zakładając, że te podstawowe problemy zostaną rozwiązane, czy istnieje wyczerpująca lista poleceń, które musiałbym zastąpić? Zestaw wygląda zniechęcająco, szczególnie jeśli chcę również wspierać szarpanie.
Gilles „SO- przestań być zły”
@Gilles Zaktualizowano, aby naprawić zachowanie rejestrów innych niż + / *. Problem z tym, "+kiedy Twój vim ma, -xterm_clipboardjest trudniejszy, ponieważ nigdy nie dostaje się do tej funkcji. Podanie niepoprawnego rejestru ( +) przerywa polecenie. Więc wygląda na to, że zachowanie musi zostać odwrócone, więc "+"*
zamapuj