5

Я хочу восстановить текст с помощью команды vim, чтобы он оказался в буфере обмена экрана, где позже его можно вставить в другое приложение через ^ A]. vim должен выполнить копирование (не режим копирования экрана), потому что у меня больше текста, чем уместится на экране за один раз.

Ответы на другие вопросы , которые подошли этот вопрос, но они в основном полагаются на использование интерфейсов VIM в + и * в X буфер обмена, который не доступен для приложения , запущенного дистанционно или не в присутствии X сессии , чтобы начать с. Я работаю через PuTTY, но это случайно, так как я просто хочу переключаться между экранами, а не [обязательно] на локальный.

Лучше всего будет наличие магического буфера в vim, который подключается к экрану, но я послушаю обходные пути:)

1 ответ1

3

Если вам не мешают какие-то дополнительные нажатия клавиш, я не вижу проблемы.

Регистр копирования и вставки экрана GNU Screen (.) Можно читать / записывать в файл из коробки: <C-a>< и <C-a>> являются горячими клавишами по умолчанию, /tmp/screen-exchange - файл по умолчанию, но я бы хотел Я предпочитаю пользовательский, а не общесистемный, поэтому я бы установил что-то подобное в .screenrc

setenv BUFFERFILE "$HOME/.buffer" 
bufferfile "$BUFFERFILE"

Vim не имеет таких команд из коробки, но нетрудно создать и сопоставить их с тем, что вы хотите, например, <leader>< и <leader>> соответственно:

if exists("$BUFFERFILE")
    nnoremap <silent><leader>< :let @" = join(readfile($BUFFERFILE), "\n")<CR>
    nnoremap <silent><leader>> :call writefile( split(@", "\n"), $BUFFERFILE )<CR>
endif

Однако если они вас беспокоят, все становится немного сложнее - насколько вы понимаете, вы должны:

  • переназначить все возможные комбинации yank, cut (так как при изменении определенного регистра нет события autocmd) и вставить (так как это фактически единственно возможный триггер) ярлыки в Vim - ничего сложного, но утомительного - надеюсь, вы знаете, как это сделать;
  • переназначить два ярлыка в GNU Screen: при вставке один вполне очевиден:

     bind ] eval readbuf "paste ."
    

    одно нажатие - <Return> или <Space> в специальном режиме копирования представляет трудности для меня.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .