我怎样才能让 vim 将文本复制到 GNU 屏幕的剪贴板缓冲区?

我怎样才能让 vim 将文本复制到 GNU 屏幕的剪贴板缓冲区?

我想使用命令将文本提取到 vim 中,然后将其保存在屏幕的剪贴板中,稍后可以通过 ^A] 将其粘贴到其他应用程序中。vim 需要进行复制(而不是屏幕的复制模式),因为我的文本量超过了屏幕一次可以容纳的数量。

答案其他问题接近问题,但它们主要依赖于使用 vim 的接口 + 和 * 来访问 X 剪贴板,而远程启动或没有 X 会话的应用程序无法使用该接口。我正在通过 puTTY 工作,但这只是偶然的,因为我只想在屏幕之间传输,而不一定传输到本地。

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

答案1

如果一些额外的击键不会打扰您,那么我认为不存在问题。

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

然而,如果他们确实打扰你,事情就会变得有点复杂——据了解,你必须:

  • 重新映射 Vim 中所有可能的拉取、剪切(因为在改变某些寄存器时没有自动命令事件)和粘贴(因为它实际上是唯一可行的触发器)快捷方式 - 并不复杂但很乏味 - 我希望你知道怎么做;
  • 在 GNU Screen 中重新映射两个快捷方式:粘贴一个快捷方式非常明显:

     bind ] eval readbuf "paste ."
    

    拉取一个 –<Return>或者<Space>以特殊的复制模式对我来说很困难。

相关内容