はじめに
Nvimの環境構築時にクリップボード設定で躓いたのでその共有です。
というのも、自分のNvimを使用している構成が,
- DockerでArch Linuxのコンテナを起動
- Tmuxを起動
- Nvimを起動
- Visual mode起動
- Yank
という感じで、Dockerコンテナ内でvimを使用していて、
Docker内からホストマシーン(mac)のクリップボードにコピーがしたかったからです。
環境
- Host OS: Mac OS(13.0.1)
- Docker Image: archlinux
- Emulator: kitty
- Session Manager: Tmux (inside docker)
- Editor: Neovim(v0.8.3)
問題
いろんな記事を見たところ、下記の設定で解決するとのことでした。
vim.opt.clipboard = 'unnamedplus'
しかし、ホストマシーンから直接NvimのYankを使った場合はうまくいきましたが、本来の目的である、Dockerコンテナ内でVimを使用すると、ホストマシーンのクリップボードへコピーできませんでした。
解決方法
一度Nvimが何のClipboardを使っているか下記のコマンドで調べることができました。
:checkhealth
結果
provider: health#provider#check
========================================================================
## Clipboard (optional)
- OK: Clipboard tool found: tmux
Tmuxを使っていました。
ちなみにTmuxでの設定は下記のようになっています。
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
最終的にこの記事を参考に下記のようにclipboardの設定をしたところ、クリップボードへのコピーが可能になりました。
if vim.env.TMUX then
vim.g.clipboard = {
name = 'tmux',
copy = {
["+"] = {'tmux', 'load-buffer', '-w', '-'},
["*"] = {'tmux', 'load-buffer', '-w', '-'},
},
paste = {
["+"] = {'tmux', 'save-buffer', '-'},
["*"] = {'tmux', 'save-buffer', '-'},
},
cache_enabled = false,
}
end
上記の記事によるとSSHでリモートマシーンに接続して、
そこからVimのYankをローカルのホストマシーンのクリップボードにコピー可能らしい。
余談
こちらの記事によると、OSによってClipboardを切り替えたい場合は下記のような設定もできるらしい。
-- mac osの場合
if vim.loop.os_uname().sysname == 'Darwin' then
vim.g.clipboard = {
name = 'macOS-clipboard',
copy = {
['+'] = 'pbcopy',
['*'] = 'pbcopy',
},
paste = {
['+'] = 'pbpaste',
['*'] = 'pbpaste',
},
cache_enabled = 0,
}
end
OSの種類は下記のコマンドで調べられる。
:lua print(vim.loop.os_uname().sysname)