如何让 vim 将文本复制到 GNU 屏幕的剪贴板缓冲区?

gws*_*gws 7 clipboard vim gnu-screen

我想用 vim 的命令拉取文本,并将其放在屏幕的剪贴板中,稍后可以通过 ^A] 将其粘贴到不同的应用程序中。vim 需要进行复制(不是屏幕的复制模式),因为我有更多的文本,一次无法在屏幕上显示。

其他问题的答案已经解决了这个问题,但它们主要依赖于使用 vim 的接口 + 和 * 到 X 剪贴板,这不适用于远程启动的应用程序或不存在 X 会话的情况下开始。我正在通过 PuTTY 工作,但这是偶然的,因为我只想在屏幕之间转移而不是 [必须] 到本地。

最好的事情是在 vim 中存在一个连接到屏幕的魔法缓冲区,但我会听取解决方法:)

Dmi*_*rov 5

如果一些额外的击键不会打扰你,我看不出有什么问题。

GNU Screen 的复制粘贴寄存器 ( .) 可以直接从文件读取/写入文件:<C-a><并且<C-a>>是默认热键,/tmp/screen-exchange是默认文件,但我更喜欢特定于用户的而不是系统范围的,所以我会设置一些东西像这样.screenrc

setenv BUFFERFILE "$HOME/.buffer" 
bufferfile "$BUFFERFILE"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

但是,如果他们确实打扰您,事情会变得更加复杂 - 据了解,您必须:

  • 在 Vim 中重新映射所有可能的 yank、cut(因为在更改某些寄存器时没有 autocmd 事件)和粘贴(因为它实际上是唯一可行的触发器)快捷方式——不复杂但很乏味——我希望,你知道怎么做;
  • 在 GNU Screen 中重新映射两个快捷方式:虽然粘贴一个很明显:

     bind ] eval readbuf "paste ."
    
    Run Code Online (Sandbox Code Playgroud)

    猛拉一个——<Return>或者<Space>在特殊的复制模式下对我来说是一个困难。