LoginSignup
8
5

More than 5 years have passed since last update.

Windows 版 neovim でクリップボードが動作しない場合の対処(暫定策)

Posted at

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 を追加した.

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5