TL;DR
- Windows 版 neovim では
win32yank.exe
を使うが,パスを認識していないことがある - neovim の変数として管理している
$PATH
を参照せずに Windows の環境変数の%PATH%
を参照しているらしい - Windows の環境変数の
%PATH%
に Windows 版 neovim のパスを追加すると直る
正直あんまり調べてない
Windows 版 neovim におけるクリップボード機能の実現方法
neovim におけるクリップボードが動作するか否かの判断は, neovim/share/nvim/runtime/autoload/provider/clipboard.vim
を読めばどうなっているかが分かる.
function! provider#clipboard#Executable() abort
if exists('g:clipboard')
" 中略
elseif has('mac') && executable('pbcopy')
" 中略
" 以下同様に各プラットフォーム対応の分岐が続く
elseif executable('win32yank')
let s:copy['+'] = 'win32yank -i --crlf'
let s:paste['+'] = 'win32yank -o --lf'
let s:copy['*'] = s:copy['+']
let s:paste['*'] = s:paste['+']
return 'win32yank'
elseif exists('$TMUX') && executable('tmux')
" 中略
endif
" 後略
endfunction
Windows 版 neovim においては, nvim-qt.exe
と同じディレクトリ(neovim/bin
)に win32yank.exe
が存在するため, executable('win32yank')
の返り値が 1
となってクリップボードが有効になるはずである.
しかし,この返り値が 0
となる場合があって,動作しないことがある.
発生状況の確認
状況としては以下
-
nvim-qt.exe
をダブルクリックして起動した場合,返り値は1
-
nvim-qt.exe
と関連付けたテキストファイルをダブルクリックして起動した場合,返り値は0
- しかし,どちらの場合も
!win32yank
が Windows 版 neovim 上から実行できる
解決方法
ここ や ここ の issue を見ると, neovim と windows の環境変数との間でパスの認識に差があることが伺える.
とりあえず, neovim の開発チームに問題は知られているだろうし, vim-script をちょっといじって直るような問題でもなさそうなので,暫定策で回避する(あんまり issue の議論を読んでいない).
executable('win32yank')
は windows の環境変数のパスを参照しているようなので,それに neovim/bin
を追加する.
僕の場合は, C:\Users\xxxxxxxx\AppData\Local\Program\Neovim\bin
を追加した.