はじめに
この記事では、neovimでヤンクしたテキストをwindowsのクリップボードにコピーする方法及び、init.luaの設定を紹介します。
neovimを使い始めてまず当たった壁がこれだったのでお役に立てれば幸いです。
問題
windowsのWSL上でnvimを使用する際に%yなどでヤンクした行が、windowsのクリップボードに反映されない事象が起こった。
環境: windows11 WSL
手順
1. win32yankをインストール
環境に合わせてください。私はwin32yank-x64.zipをインストールしました。
2. ~/binを作成し、win32yank.exeを移動
win32.yank-x64.zipを解凍してください。その後、exeファイルを~/binに移動します。
mkdir ~/bin
mv ~/Downloads/win32yank.exe ~/bin
cd ~/bin
chmod +x win32yank.exe
3. PATHを通す
nvim ~/.bashrc
.bashrcの最後に以下を追記し、wslの再起動を行います。(普通にexitでOKです)
export PATH=$HOME/bin:/usr/local/bin:$PATH
4. PATHの確認
これで、先ほど追加したパスが出てくれば完了です。
echo $PATH
5. init.luaの設定
お待ちかねの、init.luaの設定です。
init.luaは~/.config/nvim/init.lua
にあります。
まだ作っていない場合は以下で作成してください
mkdir ~/.config/nvim/
cd ~/.config/nvim
touch init.lua
以下のように記述します。
(2024/04/17追記)
コメントにもありますよう、ddでクリップボード共有をしたときに非常に遅くなる事象が発生しました。
以下の設定で問題なくできました。
if vim.fn.has("wsl") == 1 then
if vim.fn.executable("wl-copy") == 0 then
print("wl-clipboard not found, clipboard integration won't work")
else
vim.g.clipboard = {
name = "wl-clipboard (wsl)",
copy = {
["+"] = 'wl-copy --foreground --type text/plain',
["*"] = 'wl-copy --foreground --primary --type text/plain',
},
paste = {
["+"] = (function()
return vim.fn.systemlist('wl-paste --no-newline|sed -e "s/\r$//"', {''}, 1) -- '1' keeps empty lines
end),
["*"] = (function()
return vim.fn.systemlist('wl-paste --primary --no-newline|sed -e "s/\r$//"', {''}, 1)
end),
},
cache_enabled = true
}
end
end
補足
-
私はwsl以外にVirtualBox上にUbuntu22.04を乗せて使ってます。
vim.opt.clipboard = "unnamedplus"
を追加しているので、Linuxのクリップボードでもコピーができました。 -
if vim.fn.has('wsl') == 1 then
と書くことで、wsl以外ではこの設定が読み込まれないようにしてあります。これを書かないとLinux環境でバグが発生しました。
参考
ほぼパクリ感がありますが、configがluaで書いてあるということで許してください。