如何使用 Wayland 从 Vim 复制到系统剪贴板并且没有编译的 vim `+clipboard` 功能标志

Posted

技术标签:

【中文标题】如何使用 Wayland 从 Vim 复制到系统剪贴板并且没有编译的 vim `+clipboard` 功能标志【英文标题】:How to copy from Vim to system clipboard using wayland and without compiled vim `+clipboard` feature flag 【发布时间】:2020-08-06 07:28:50 【问题描述】:

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

:echo has('clipboard') 在 Vim 中返回 0 表示我没有那个功能标志,我不想重新编译。

我正在运行 Wayland,所以我不能使用 X11 based solutions

【问题讨论】:

可能相关插件:fauxClip 【参考方案1】:

我在寻找资源时遇到了麻烦,所以最后通过添加 ~/.vimrc 来解决问题。

nnoremap <C-@> :call system("wl-copy", @")<CR>

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

上面的映射实现的是

    使用Ctrl + @ 激活映射。或选择任何方便的组合键 nnoremap &lt;C-@&gt;

    "寄存器的内容,

    @" 参数表示

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

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

Alternatively

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

:'<,'>w !wl-copy

在哪里

'&lt;,'&gt; - 表示您使用可视模式选择了一个范围(您无需输入) w !cmd - 将范围写入cmd 的标准输入,更多信息请参见:help w_c

您可以使用

进行映射
xnoremap <silent> <C-@> :w !wl-copy<CR><CR>
xnoremap: 映射只能在可视模式下工作 &lt;silent&gt;: 不会在命令行中回显的映射 &lt;C-@&gt;:想要的组合键 :w !cmd:将范围写入cmd的标准输入 &lt;CR&gt;&lt;CR&gt;: 需要两次回车,否则命令行等待另一个命令

【讨论】:

【参考方案2】:

作者要求的功能有望在 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>

【讨论】:

以上是关于如何使用 Wayland 从 Vim 复制到系统剪贴板并且没有编译的 vim `+clipboard` 功能标志的主要内容,如果未能解决你的问题,请参考以下文章

如何在两个不同的vim文件之间进行复制粘贴

如何在Vim中复制到剪贴板?

如何从命令行/tty 启动 GNOME Wayland 会话? [关闭]

如何使用linux系统vim中的复制,粘贴和删除

如何从一个vim窗口复制到另一个MacOS

vim 如何与外界粘贴复制