2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerコンテナ内でVimのYank(コピー)をホストマシーンのクリップボードにコピーした方法

Posted at

はじめに

Nvimの環境構築時にクリップボード設定で躓いたのでその共有です。
というのも、自分のNvimを使用している構成が,

  1. DockerでArch Linuxのコンテナを起動
  2. Tmuxを起動
  3. Nvimを起動
  4. Visual mode起動
  5. 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)

問題

いろんな記事を見たところ、下記の設定で解決するとのことでした。

init.lua
vim.opt.clipboard = 'unnamedplus'

しかし、ホストマシーンから直接NvimのYankを使った場合はうまくいきましたが、本来の目的である、Dockerコンテナ内でVimを使用すると、ホストマシーンのクリップボードへコピーできませんでした。

解決方法

一度Nvimが何のClipboardを使っているか下記のコマンドで調べることができました。

:checkhealth

結果

provider: health#provider#check
========================================================================
## Clipboard (optional)
  - OK: Clipboard tool found: tmux

Tmuxを使っていました。
ちなみにTmuxでの設定は下記のようになっています。

.tmux.con
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の設定をしたところ、クリップボードへのコピーが可能になりました。

init.lua
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を切り替えたい場合は下記のような設定もできるらしい。

init.lua
-- 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)

参考記事

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?