WSL2 がリリースされ Windows 10 Home Edition でも使える様になったので色々遊んでるのだけど、Windows 側とテキストを交換したい時に面倒で、クリップボードを共有する方法を模索した。
最悪 /dev/clipboard
を実装するまで考えたけど、面倒過ぎたし exe の実行厳しい(何か常駐させてユーザランドから起動する為にサーバがいる)だろうから別の方法を考えた。WSL2 は binfmt (たぶん違うけど良く似た奴だろう) で Windows の exe が起動できるので、コマンド経由で stdin/stdout を read/write できる物を起動する方法を考えた。
で自分で書くかと Windows Terminal 起動した時点で「Windows Terminal からコピペできるやん、いらなくね?」となり、本来の目的を忘れかけていたので、おとなしく GitHub からそういったコマンドを探した。
GitHub - equalsraf/win32yank: Windows clipboard tool
Dismiss Join GitHub today GitHub is home to over 50 million developers working together to host and ...
https://github.com/equalsraf/win32yank
こちら便利そうだったけど、僕は Go 言語使いなので、go get
で一発で入るのが欲しかった。最終的には以下のリポジトリにある gocopy と gopaste が良さそうだった。
GitHub - atotto/clipboard: clipboard for golang
Clipboard for Go Provide copying and pasting to the Clipboard for Go. Build: -1 go get github.com/ato...
https://github.com/atotto/clipboard
Windows 側では以下の様にインストールする。
go get github.com/atotto/clipboard/cmd/gocopy
go get github.com/atotto/clipboard/cmd/gopaste
あとは WSL2 の .bash_aliases
に以下を足した。
alias gocopy=/mnt/c/Users/mattn/go/bin/gocopy.exe
alias gopaste=/mnt/c/Users/mattn/go/bin/gopaste.exe
パスは個人によって違うの修正して下さい。
$ echo あいう | gocopy
$ gopaste
あいう
こんな感じに使う。
追記
Vim から :w !goclip
したいのであれば alias じゃなく shell で wrapper 書くかシンボリックリンクを WSL2 のパスの通った所に張るのが良さそうです。ちなみに PowerShell の get-clipboard と clip.exe でも出来るけど遅いのが嫌いなのでこの方法にしました。