Skip to main content

WSL2 上の Neovim とクリップボードを連携する設定

s-show
s-show

20 days前に投稿

0
Neovim: 0.10+
License: MIT

LUA
-- copy to clipboard
vim.keymap.set('v', '<leader>y', '"+y')
vim.keymap.set('n', '<leader>Y', '"+yg_')

-- cut to clipboard
vim.keymap.set('v', '<leader>d', '"+d')
vim.keymap.set('n', '<leader>D', '"+dg_')

local function paste()
  return {
    vim.fn.split(vim.fn.getreg(""), "\n"),
    vim.fn.getregtype(""),
  }
end

vim.g.clipboard = {
  name = "OSC 52",
  copy = {
    ["+"] = require("vim.ui.clipboard.osc52").copy("+"),
    ["*"] = require("vim.ui.clipboard.osc52").copy("*"),
  },
  paste = {
    ['+'] = paste,
    ['*'] = paste
  },
}

WSL2 上の Neovim でもクリップボードを使う設定

OSC52 を使うことで、WSL2 上で動いている Neovim とクリップボードを連携させる設定です。この設定を入れると、<leader>y<leader>Y<leader>d<leader>D で Neovim のバッファのテキストを OSC 52 経由でターミナル側のクリップボードに送れます。

ポイントは、Neovim 組み込みの vim.ui.clipboard.osc52 を使っていることです。追加プラグインを入れずに OSC 52 連携を実現できます。

一方、貼り付けについては、OSC 52 から直接取得するのではなく、Neovim 内部の無名レジスタを返す実装にしています。私は貼り付けは Shift-Insert を使って「ターミナルに文字列を挿入する処理」で実行しているのでこの設定は不要なのですが、paste も設定しないと copy の設定が有効にならないようですので1、一応設定しています。

そのため、この設定は主に Neovim のバッファのテキストを外部クリップボードにコピーするためのものです。

補足

この設定は、ターミナルアプリが OSC52 に対応していることが前提となっています。


コメントを投稿するにはログインが必要です