リモートサーバーでNeovimを使用する際の不便な点の一つはクリップボードでした。ローカル環境ではNeovimの設定と xclip だけで簡単に解決できますが、SSHを通じてリモートサーバーで作業をする際には、コピーした内容をローカルPCのクリップボードに入れることが難しいです。いくつかの試行錯誤を経て見つけたシンプルな解決策をご紹介します。

OSC52を活用したNeovimクリップボード連携構造図


環境および準備事項

  • リモートサーバー: Ubuntuベースのサーバー

  • ローカルPC: UbuntuベースのGUI環境

  • Neovimのインストール完了 (init.lua設定を基に説明します。)

ステップ1: リモートサーバーにxclipをインストール

まずリモートサーバーで次のコマンドを使用して xclip をインストールします。

sudo apt install xclip

このパッケージはNeovimがシステムクリップボードと通信するために必要です。

ステップ2: 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
},

この設定により、Neovimでコピー(yank)した内容がOSC52プロトコルを介して自動的にローカルクリップボードに送信されます。

ステップ3: SSHサーバー設定

リモートサーバーのSSHデーモン設定でX11Forwardingオプションを有効にする必要があります。そうしないとOSC52は正常に動作しません。

/etc/ssh/sshd_configファイルを開き、以下の設定を確認または追加します。

AllowTcpForwarding yes
X11Forwarding yes

変更後、SSHデーモンを再起動します。

sudo systemctl restart sshd

ステップ4: ローカルSSHクライアントの設定

ローカルPCでSSHを介してサーバーに接続する際、X11 Forwardingを有効にする必要があります。そのためにはSSH設定ファイルに追加します。

~/.ssh/configファイル:

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

これでSSHで接続する際には簡単に ssh myserver コマンドを使用できます。

ステップ5: Neovimクリップボードオプション設定

最後にNeovimがクリップボードを使用するように設定します。 init.luaファイルに追加します。

vim.o.clipboard = 'unnamedplus'

使用方法

これで全ての設定が完了しました。Neovimで内容をコピーする際はVisual Mode(v)で範囲を選択し、yキーを押すと、コピーした内容が自動的にローカルPCのクリップボードに保存されます。

これでリモートサーバーのNeovimでコピーした内容をローカルのブラウザやメモ帳に直接貼り付けることができます。


最初は複雑に感じたプロセスですが、一度設定してしまえば非常に便利です。リモート開発環境を頻繁に使用するのであれば、ぜひ設定してみてください。