WSL+tmux+vimでクリップボードを（ある程度）共有する

## はじめに
VimとTmuxをターミナルとシステムクリップボードと連携させようとしたとき、
Macユーザー向けの情報は結構出てくるが、WSL向けの情報があまりなかったので。
あとVimのビルドでハマったので。
[こちらの動画](https://www.youtube.com/watch?v=_MgrjgQqDcE)は分かりやすいので、先にご覧いただくとよいかもしれません。

## 環境

* ローカル環境
  * Windows 10
  * WSL(Ubuntu 18.04)
  * tmux 2.6

* リモート環境
  * GCE(CentOS 7.6.1810)

* 共通
  * Vim

## 概要
WSL, tmux, vimを使う際にシステムクリップボードを共有するため、以下のような作業を行いました。

* vim
  * featureのうちclipboardを有効にするため、GUIサポート有でソースからビルド
* tmux
  * tpmとtmux-yankの導入
* VcXsrv
  * 新規インストールと.zshrcへの設定追加
* リモート環境とのシステムクリップボード共有
  * sshの設定変更で可能。ただし、自分のマシンとネットワークが貧弱でリモート接続が我慢できないほど遅くなることがわかったので設定を戻した


## vim
まず、使用中のvimのバージョンを確認（vim --version）して、

1. vimの種類（tiny, normal, hugeなど）がHuge version without GUI
1. clipboard機能が無効（-clipboard）

などとなっている場合、システムクリップボードがうまく働きません。
vimをソースからビルドする際に、オプションの設定で機能のON/OFFが設定できるようなので、ソースからビルドすることで対応しました。
以下の画像は、チェックする箇所です（ビルド後にキャプチャしているので値は修正後のものです）

![qiita2 - コピー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117534/8c11342b-3da7-7865-bd9d-28fe95f5ce9a.jpeg)


ソースからビルドする前に、依存するリポジトリのインストールをします。
試行錯誤しながら行った際のコマンドなどで、不要なものも含まれているかもしれません。
また、ローカル環境はUbuntu、リモート環境はCentOsなので微妙にコマンドが違います。

```sh
#centos:
sudo yum install python-devel python36-devel
sudo yum install gtk2 gtk2-devel
sudo yum install xorg-x11-server-devel
sudo yum install ruby ruby-devel
sudo yum-builddep vim-X11
sudo yum -y groupinstall "X Window System"

#ubuntu:
sudo apt build-dep vim
sudo su -c "grep '^deb ' /etc/apt/sources.list | \
sed 's/^deb/deb-src/g' > /etc/apt/sources.list.d/deb-src.list"
sudo apt update
sudo apt build-dep vim
sudo apt-get install python-dev python3-dev
sudo apt-get install xorg-dev libgtk2.0-dev
```

### メイク

```make
sudo ./configure --with-features=huge \
 --enable-multibyte \
 --enable-gpm \
 --enable-cscope \
 --enable-fontset \
 --enable-fail-if-missing \
 --enable-pythoninterp=dynamic \
 --enable-python3interp=dynamic \
 --enable-rubyinterp=dynamic \
 --enable-gui=auto \
 --enable-gtk2-check \
 --with-x 
```

ハマったポイントとしては、

centosで上記コマンドを実行する際に、--with-xオプションがどうしても通らない
→X11用のパッケージを片っ端からインストールするも通らない
→よくよくエラーメッセージを見ると、--with-xオプションの依存関係を判定する部分に(cache)の文字がある
→configure実行時に設定によってはキャッシュをすることができるようになっている
→vim/src/auto以下のconfig.cacheを削除し、configure再実行で通った

その後、makeとmake installをします。

```
sudo make
sudo make install
```

インストール後、.vimrcなど設定は特にいじる必要はありませんでした。

## tmux

以下の記事を参考に、tpmとtmux-yankを入れました。（ついでにtmux-resurrectも）

[【tmux】tpmでplugin管理して快適ターミナル生活](https://qiita.com/izumin5210/items/5b7f4c01fb6fe6064a05)

設定は以下を追加しました。

```conf:.tmux.conf
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-resurrect'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run -b '~/.tmux/plugins/tpm/tpm'
```

## VcXsrv

実はこちらはもともとインストールしてあったので、設定の確認だけ行いました。
インストールから行う方は、以下の記事が参考になるかと思います。

[WSL上のvimでクリップボードを共有する方法](https://qiita.com/miyagaw61/items/c299c452a105a6a9f50a)

.zshrcに以下の文言も追加しました。（bashなどを使っている方も同様です）

```
# VcXsrv setting
export DISPLAY=localhost:0.0
```

## リモート環境とのやりとり

[こちら](https://qiita.com/lethe2211/items/7c3625e37a3d95244794)によれば、sshのconfigに

```
    ForwardX11 yes
    ForwardX11Trusted yes
```

と追加し、リモート環境にxselインストールやaliasの設定などをするとありますが、自分の環境ではxselなどは不要でした。
ただ、上記ForwardX11の設定をするとssh接続時の動作が遅くなってしまい（特にvimをリモート環境で開くときに顕著）逆にストレスになったので、適用はしませんでした。
環境要因だと思いますので、試していただいてもよいと思います。

## おわりに
半日ほど作業にかかってしまったのですが、ふとした時にコピペできないストレスがなくなったので長い目で見ればよい結果をもたらすだろうと思います。
あとはmakeをちゃんと理解しないとなあと痛感しました。。。

## その他の参考情報
[Vim の種類 (Vim family)](https://qiita.com/b4b4r07/items/f7a4a0461e1fc6f436a4)
[vimでclipboardを+にしたいけどならない人向け](https://qiita.com/Nikkely/items/7bfa4e71a6eb1e3d7bed)
[[vim] config.cacheが悪さをした](http://d.hatena.ne.jp/ampmmn/20081123/1227423981)
[How to build vim from sources with GUI support?](https://vi.stackexchange.com/questions/2646/how-to-build-vim-from-sources-with-gui-support)
[Redhat系Linux（CentOS7）にVim8をインストールする方法いろいろ](https://genzouw.com/entry/2019/02/27/075021)