【问题标题】:How to copy/paste from Vim in WSL如何在 WSL 中从 Vim 复制/粘贴
【发布时间】:2020-08-16 10:03:43
【问题描述】:

我正在尝试使用 Vim 来定位和复制/粘贴一些我需要分析和记录的代码。我在 Windows WSL 环境中使用 Debian。这就是让事情变得棘手的原因。

常规的“yank and put to global register”命令"+y"*y 命令不起作用。

另一方面,我仅使用鼠标刮取终端文本的蛮力方法也行不通。奇怪的是,WSL 终端有鼠标支持,而且 Vim 可以跟踪它的移动,在可视模式下选择等。所以 Vim 拦截了选择命令,然后 ctrl-shift-c 没有选择任何内容复制到 Windows 剪贴板中。

我知道 WSL 终端支持复制和粘贴,如果我将 cat 我的文件到屏幕上,然后使用 ctrl-shift-c 和 ctrl-v 复制和粘贴,我可以成功地做到这一点。但后来我失去了导航的便利性。

在 WSL 终端中将文本从 Vim 复制到 Windows 剪贴板的最佳方法是什么?

【问题讨论】:

  • 如果您不希望 vim 处理您的鼠标,以便您仍然可以像在终端中进行其他任何操作一样突出显示和复制,您应该可以:set mouse=
  • 您可以使用clip.exe 从 WSL 访问剪贴板吗?如果是这样,请直观地选择它们运行:w !clip.exe 的行。 (clip.exe 建议的来源:raymondcamden.com/2017/10/19/…
  • 我正在使用 Neovim,并按照他们在github.com/neovim/neovim/wiki/… 的常见问题解答中的说明进行操作。否则,我认为How to “copy to clipboard” in vim of Bash on Windows? 可以帮助您。有一些解决方案不需要在 Windows 上安装 X 服务器。

标签: vim clipboard windows-subsystem-for-linux


【解决方案1】:

答案是,做一个 vim 视觉选择然后执行命令:

:'<,'>w !clip.exe

这会将当前选择通过管道传递给 shell 命令clip.exe,该命令利用 WSL 执行 Windows 可执行文件的能力(即使使用管道)。通过管道传送到clip.exe 的文本会转到 Windows 剪贴板。

此外,此命令将整个文件保存到剪贴板(不是必需的):

 :w !clip.exe

【讨论】:

  • 哇 - 当我看到新用户对旧问题提供正确且有用的答案时,这真的很少见!恭喜,欢迎来到 Stack Overflow!一个小建议 - 提供一些关于为什么有效的细节,以便人们更好地理解机制并可以将其调整为其他用途。我将对其进行小幅编辑以添加此信息。
  • 对于那些想知道,从剪贴板粘贴到 WSL Vim 的人仍然可以在插入模式下通过右键单击来完成。
【解决方案2】:

就像 romainl 提到的,剪贴板在 X 级。所以最重要的一步是你需要在Windows 上运行一个X-server,并且你需要在Linux 上设置DISPLAY 变量指向X-server。然后在 neovim set clipboard=unnamedplus 或 vim set clipboard=unnamed 中链接到系统剪贴板。

关注this nice gist 应该会让事情顺利进行。

对我来说,我使用的是 fish shell,wsl 特定的逻辑变成了你的config.fish

if uname -r | grep 'microsoft' > /dev/null 
  set -l LOCAL_IP (cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
  set -xg DISPLAY $LOCAL_IP:0
end

【讨论】:

    【解决方案3】:

    在 Linux 上,Vim 的剪贴板支持与 X 密切相关。如果您希望 WSL 与 Windows 其余部分之间的集成水平与您在适当的 Linux Box 中习惯的相同,则必须安装 Windows X Server。

    1. 在 Linux 端,安装支持剪贴板的 Vim 版本。 vim-gtk 包很好。

    2. 在 Windows 端,安装像 VcXsrv 这样的 X 服务器(有很多个替代方案,您可以自行找到最适合您需要的那个)。

    3. 您通常必须在 Linux 端编辑几个配置文件,以便您的 X 客户端使用正确的 X 服务器。具体做什么取决于您选择的 X 服务器。

    4. 在 Vim 中,在 Linux 端,使用 "+"*,就像在真正的 Linux 机器上一样。

    【讨论】:

    • 我这样做了,当我运行 vim somefile 时,vim 需要很长时间才能启动。
    • @mbomb007,FWIW,我在开始为 $BIG_PHARMA 演出的几周后写了这个答案,我不得不在他们的一个破旧的联想上工作,并弄清楚了确切的设置。请注意,整台机器是一个蛞蝓,但我没有注意到任何特别的启动减速。较长的启动时间可能是由于 Vim 无法/难以连接到 X 服务器。看看你是否正确完成了所有配置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2012-07-14
    • 2020-02-06
    • 1970-01-01
    • 2017-02-28
    相关资源
    最近更新 更多