Визначте власні команди для регістрів * та +


9

Якщо я використовую збірку Vim з цією xterm_clipboardфункцією, то вміст системного буфера обміну доступний через +реєстр.

Якщо збірка, яку я використовую, не має цієї функції, чи можу я змусити змусити "+регістр викликати свої власні програми для отримання та встановлення системного буфера обміну ( xsel -boі xsel -biчи так само xclip)? Так само з "*дзвонити xsel -poі xsel -pi.

Сенс у тому, щоб мати можливість вводити щось на кшталт, "+pне турбуючись про те, чи доступна функція. Typing :r !xsel -b<Enter>це не те , що я шукаю: я хочу ті ж комбінації клавіш для роботи, і я хочу, щоб паста варіанти дотримуватися того , що доступно для «справжніх» регістрів ( P, gp, ...).

Бонус: чи можу я визначити спеціальні команди для інших імен реєстру?

Відповіді:


7

Кілька <expr>карти повинні бути спроможні виконати роботу тут. Основна структура була б

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)

Функція буде необхідно розширити , щоб обробляти всі варіанти p, P, gpі т.д. , але це повинно бути початок хороше.


Це здається на правильному шляху, але це не працює. Простий p(без попереднього "і імені реєстру) нічого іншого, крім make, не "pвідображається в рядку статусу. "apеквівалент a, "bpзвукові сигнали, ... я не розумію логіки. "+звучить одразу, я навіть не можу сказати, що я маю на увазі +або *як ім’я реєстру.
Жил "ТАК - перестань бути злим"

1
Якщо припустити, що ці основні проблеми вирішені, чи є вичерпний список команд, які мені потрібно переосмислити? Набір виглядає приголомшливо, особливо якщо я хочу також підтримати янки.
Жил "ТАК - перестань бути злим"

@Gilles Оновлено, щоб виправити поведінку з не - + / * регістрами. Проблема, "+коли ваш vim має -xterm_clipboardскладніше, тому що він ніколи не переходить до цієї функції. Визначення недійсного регістра ( +) скасовує команду. Так, схоже, що поведінку насправді треба перевернути, тому картографуйте "+або, "*а потім
обробляйте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.