Every time I set up Neovim on a fresh WSL instance, I hit the same wall: yanking text inside Neovim and pasting it into a Windows app (or vice versa) just doesn't work. "+y does nothing, and Neovim greets you with Clipboard: No provider, try :checkhealth. Nothing flows in or out of the clipboard, not even between files inside WSL.
The root cause is that WSL's Neovim can't talk to the Windows clipboard at all. The fix is a tiny Windows executable called win32yank that speaks the Windows clipboard API from the command line.
I've done this enough times now that I'm writing it down so I never have to search for it again. If you're here for the same reason, this one's for you.
Step-by-Step
1. Download win32yank
Grab the latest release from github.com/equalsraf/win32yank. Download win32yank-x64.zip and extract it to get win32yank.exe.
2. Place it in your WSL PATH
sudo mv /mnt/d/win32yank.exe /usr/local/bin/
Adjust the source path to wherever your browser downloaded it (usually /mnt/c/Users/<you>/Downloads/win32yank.exe).
3. Configure Neovim
Add this block to ~/.config/nvim/init.lua:
if vim.fn.has("wsl") == 1 then
vim.g.clipboard = {
name = 'win32yank-wsl',
copy = {
['+'] = 'win32yank.exe -i --crlf',
['*'] = 'win32yank.exe -i --crlf',
},
paste = {
['+'] = 'win32yank.exe -o --lf',
['*'] = 'win32yank.exe -o --lf',
},
cache_enabled = 0,
}
vim.opt.clipboard = 'unnamedplus'
end
4. Done
Now y, "+y, "+p, right-click copy/paste — all of it flows through the Windows clipboard as you'd expect.
Bonus: One-Shot Setup Script
Next time I (or you) need this on a fresh box, run this single script. It downloads win32yank, installs it, and appends the config:
#!/usr/bin/env bash
set -euo pipefail
WIN32YANK_PATH="/usr/local/bin/win32yank.exe"
NVIM_CONFIG="${HOME}/.config/nvim/init.lua"
TMP_DIR=$(mktemp -d)
# Get the latest release tag from GitHub
echo "==> Fetching latest win32yank release..."
LATEST_TAG=$(curl -s https://api.github.com/repos/equalsraf/win32yank/releases/latest \
| grep '"tag_name"' \
| cut -d'"' -f4)
echo "==> Downloading win32yank ${LATEST_TAG}..."
curl -fsSL "https://github.com/equalsraf/win32yank/releases/download/${LATEST_TAG}/win32yank-x64.zip" \
-o "${TMP_DIR}/win32yank-x64.zip"
echo "==> Extracting..."
unzip -q "${TMP_DIR}/win32yank-x64.zip" -d "${TMP_DIR}"
sudo cp "${TMP_DIR}/win32yank.exe" "$WIN32YANK_PATH"
sudo chmod +x "$WIN32YANK_PATH"
rm -rf "$TMP_DIR"
echo "==> Appending clipboard config to ${NVIM_CONFIG}..."
mkdir -p "$(dirname "$NVIM_CONFIG")"
cat >> "$NVIM_CONFIG" << 'LUA'
-- win32yank clipboard for WSL
if vim.fn.has("wsl") == 1 then
vim.g.clipboard = {
name = 'win32yank-wsl',
copy = {
['+'] = 'win32yank.exe -i --crlf',
['*'] = 'win32yank.exe -i --crlf',
},
paste = {
['+'] = 'win32yank.exe -o --lf',
['*'] = 'win32yank.exe -o --lf',
},
cache_enabled = 0,
}
vim.opt.clipboard = 'unnamedplus'
end
LUA
echo "==> Done! Restart Neovim and yank away."
Save it as setup-wsl-clipboard.sh, run chmod +x setup-wsl-clipboard.sh and then ./setup-wsl-clipboard.sh.

