如何使用 wayland 从 Vim 复制到系统剪贴板而不编译 vim `+clipboard` 功能标志

How to copy from Vim to system clipboard using wayland and without compiled vim `+clipboard` feature flag

我无法复制到 +* 寄存器中。

:echo has('clipboard') 来自 Vim returns 0 意味着我没有那个功能标志,我不想重新编译。

我是 运行 韦兰所以我不能使用 X11 based solutions

我找不到资源,所以这是通过添加 ~/.vimrc.

最终得到的结果
nnoremap <C-@> :call system("wl-copy", @")<CR>

wl-copy 是一个 Command-line copy/paste utilities for Wayland,它会将您提供的管道内容复制到系统剪贴板。

上面的映射实现的是

  1. 使用 Ctrl + @ 激活映射。或选择任何方便的组合键
    • nnoremap <C-@>
  2. "寄存器的内容,

    • @" 参数表示
  3. 并将 @" 的内容作为参数传递给系统 wl-copy 函数

    • 显示为 :call system("wl-copy", @")

Alternatively

假设您只想复制文件的行部分,请执行 shift+v 进入可视模式并只突出显示我要复制的行。那就做吧。

:'<,'>w !wl-copy

哪里

  • '<,'> - 表示您使用视觉模式 select 一个范围(您不输入这个)
  • w !{cmd} - 将范围写入 cmd 的标准输入,请参阅 :help w_c

您可以将其映射为

xnoremap <silent> <C-@> :w !wl-copy<CR><CR>
  • xnoremap: 映射只能在可视模式下工作
  • <silent>: 不会在命令行回显的映射
  • <C-@>: 所需组合键
  • :w !{cmd}:将范围写入cmd
  • 的stdin
  • <CR><CR>: 需要输入两次否则命令行等待另一个命令

作者要求的功能有望在 vim 中实现。详情见:https://github.com/vim/vim/issues/5157

还有一个变通插件:https://github.com/jasonccox/vim-wayland-clipboard

至于我,我正在使用自己的解决方法:

" Yank into all these at once:
"     vim y/p register
"     wayland primary
"     wayland clipboard
xnoremap <silent> <leader>y y:call system("wl-copy --trim-newline", @*)<cr>:call system("wl-copy -p --trim-newline", @*)<cr>