2020/05/30


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 でも出来るけど遅いのが嫌いなのでこの方法にしました。

Posted at by