在远程服务器上使用 Neovim 时,令人烦恼的事情之一就是剪贴板。在本地环境中,借助 Neovim 的设置和 xclip 可以轻松解决,但在通过 SSH 在远程服务器上工作时,复制的内容很难放入本地 PC 的剪贴板。经过多次尝试,我找到了一种简洁的解决方案。

利用 OSC52 的 Neovim 剪贴板联动结构图


环境和准备事项

  • 远程服务器:基于 Ubuntu 的服务器

  • 本地 PC:基于 Ubuntu 的 GUI 环境

  • 已完成 Neovim 安装(根据 init.lua 设置进行说明)

第一步:在远程服务器上安装 xclip

首先,在远程服务器上使用以下命令安装 xclip

sudo apt install xclip

该软件包是 Neovim 与系统剪贴板通信所必需的。

第二步:配置 OSC52 协议

OSC52 是一种通过 SSH 连接直接传输内容到本地剪贴板的协议。为在 Neovim 中使用,需要安装插件。

  • 在 Neovim 配置文件 (init.lua) 中添加:
{
    'ojroques/nvim-osc52',
    config = function()
        require('osc52').setup()
        local function copy()
            if vim.v.event.operator == 'y' and vim.v.event.regname == '+' then
                require('osc52').copy_register('+')
            end
        end
        vim.api.nvim_create_autocmd('TextYankPost', {callback = copy})
    end
},

此设置会通过 OSC52 协议将 Neovim 中复制(yank)的内容自动发送到本地剪贴板。

第三步:配置 SSH 服务器

必须在远程服务器的 SSH 守护进程设置中启用 X11Forwarding 选项,OSC52 才能正常工作。

打开 /etc/ssh/sshd_config 文件,检查或添加以下设置。

AllowTcpForwarding yes
X11Forwarding yes

更改后重启 SSH 守护进程。

sudo systemctl restart sshd

第四步:配置本地 SSH 客户端

当本地 PC 通过 SSH 连接到服务器时,必须启用 X11 转发。为此,在 SSH 配置文件中进行添加。

~/.ssh/config 文件中:

Host myserver
    HostName server-address.com
    User myuser
    ForwardX11 yes
    Port 2222
    IdentityFile ~/.ssh/id_rsa

现在,连接 SSH 时只需使用 ssh myserver 命令即可。

第五步:配置 Neovim 剪贴板选项

最后,设置 Neovim 使用剪贴板。在 init.lua 文件中添加。

vim.o.clipboard = 'unnamedplus'

使用方法

现在所有设置均已完成。在 Neovim 中复制内容时,只需在视觉模式(v)下选择区域,然后按下 y 键,复制的内容将自动保存到本地 PC 的剪贴板中。

现在可以将从远程服务器上的 Neovim 复制的内容直接粘贴到本地的浏览器或记事本中。


起初感觉过程复杂,但设置好后会非常方便。如果您经常使用远程开发环境,建议一定要设置一下。