WSL2でNeovimのclipboardを設定するならOSC 52が便利だよ!
2026-01-12
「Neovim WSL2 clipboard OSC 52 🔍」とここまで丁寧にワードを入れて検索しても日本語の情報がないので全部盛りタイトルの記事を書きます。
よく出てくるのはwin32yankやlemonadoなどの3rd Partyツールを使う方法かWSL2からWindowsのclip.exeを呼び出す方法などですが、Windows側の .exe を叩くオーバーヘッドが無視できません。
しかし、実はNeovim 0.10.0以上であれば、エスケープシーケンスによってターミナルの選択範囲を遠隔操作する仕様であるOSC 52 がサポートされている、OSC 52に準拠しているターミナルであれば、特に外部依存をインストールすることなく利用可能です (筆者はWezTermを使っています)。
OSC 52に準拠しているターミナル (from Reddit)
| Terminal | OSC 52 support |
|---|---|
| Alacritty | yes |
| GNOME Terminal | not yet |
| hterm (Chromebook) | yes |
| iTerm2 | yes |
| kitty | yes |
| screen | yes |
| tmux | yes |
| Windows Terminal | yes |
| rxvt | yes (to be confirmed) |
| urxvt | yes (with a script, see here) |
A guide on how to copy text from anywhere, including through SSH, with OSC52 : r/vim
以下の記事が大変参考になりました。というよりタイトルにWSL2を入れただけで、ほぼ新しいことはありません。
普段は技術記事をZennに書いていますが、さすがにほぼリダイレクトリンクみたいな内容でハートを稼ぐのは烏滸がましいため反応を (意図的に) 実装していない個人ブログに書いています (昨今のZenn反対運動とは全く関係ありません)。
OSC 52 による Neovim とクリップボードの連携
https://zenn.dev/goropikari/articles/506e08e7ad52af

-- Ref: https://github.com/goropikari/nvim/blob/15628b7ad99504ff06ba84e7fda113aec7d46e2a/lua/base.lua#L84-L106
vim.schedule(function()
vim.opt.clipboard = "unnamedplus"
end)
local is_wsl2 = vim.fn.has("wsl") == 1
local is_ssh = os.getenv("SSH_CLIENT") ~= nil or os.getenv("SSH_TTY") ~= nil
if is_wsl2 or is_ssh then
vim.g.clipboard = {
name = "OSC 52",
copy = {
["+"] = require("vim.ui.clipboard.osc52").copy("+"),
},
paste = {
["+"] = function()
return {
vim.fn.split(vim.fn.getreg(""), "\n"),
vim.fn.getregtype(""),
}
end,
},
cache_enabled = true,
}
end