37
36

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 3 years have passed since last update.

WSLコンソールのコピペ方法まとめ(Vim,Tmux)

Posted at

bash on Cmderからzsh on WSLコンソールへ乗り換え

ここ数年、Windows10でシェルを使うときはcmderでbashを使っていたのですが、最近はWSL(Windows Subsystem for Liux)を使っています。WSLだと普通にLinuxが使えるので、zshも楽々インストールできるし、Python環境もAnacondaに縛られなくてもよくなるし、もはや、Linuxを使うためにMacを買う必要なんてありませんね。
でも、WSLが利用できるデフォルトのコンソール(WSLコンソール)は、コマンドプロンプトをベースにした、非常にシンプルなもので、正直使いづらい。。
たいていの人はcmderなどのエミュレータからWSLを使っているかと思うのですが、cmder+WSL+Tmuxで使うと、マウスでペインの操作ができなかったり、ステータスバーの更新がうまく表示されなかったりして、こりゃまた使えない。。
そこで仕方なく、WSLコンソールを使っています(WSLの今後に期待を込めて)。なんとかストレスなく作業できる程度まで設定できたのですが、特にコピペ方法の設定で苦戦したので、ショートカットキーとクリップボードとの連携方法をまとめておきます。
これを機に、WSLコンソールユーザーが増えれば幸いです!

コピペ方法

作業シーンごとのコピペ方法をまとめるとこんな感じです。基本的にはtmuxで使っているので赤字の方法だけ覚えていれば何とかなります。

作業シーン コピー 貼り付け
WSLコンソール ①マウス選択+エンター
②マウス選択+右クリック
③マウス選択+Ctrl+Shift+C
①右クリック
②Ctrl+Shift+V
Tmux on WSLコンソール ①コピーモード(prefix+[)でVisualモードで範囲指定してy(vimモード)
②コピーモード(prefix+[)でマウスで選択した状態でエンター
③コピーモード(prefix+[)でダブルクリックで選択してエンター
Ctrl+Shift+V
Vim on WSLコンソール y p
(参考)notepadなど Ctrl+C Ctrl+V

(注意)tmuxでコピーしたものをtmuxに貼り付ける場合は、prefix+]でもOKですが、tmux以外(vimやnotepadなど)からコピーしたものをtmuxに貼り付けようとするとprefix+]では貼り付けられません。その場合は、Ctrl+Shift+Vで貼り付けます。

設定方法

WSLコンソールのショートカットキーによるコピペ機能有効化

WSLコンソールのプロパティ画面の[オプション]タブにある[編集オプション]セクションで[Ctrl+Shift+C/Vをコピー/貼り付けとして使用する]のチェックを入れます。
この機能は、Windows 10 Insider Preview Build 17643(RS5)以降で利用できるようになった機能で、これまでのコマンドプロンプトの独特なコピペ方法を解消してくれて便利なんですが、tmuxを起動するとコピーモードとしては使えなくなるようです。

XサーバとしてVcXsrcをインストール

WSLではXサーバがなくて、xselが使えないため、vimとクリップボードが連携できません。
そこで、XサーバとしてVcXsrcをインストールして、環境変数DISPLAYを設定します。インストール方法はこのあたりを参考にしてください。
初回起動時に設定ファイル(~.xlaunchファイル)を保存しておいて、.zshrcでこの設定ファイルを実行するようにしておくと便利です。以下では、多重起動も禁止しています。

.zshrc
if [ -e /mnt/c/WINDOWS/System32/wsl.exe ]; then
    export DISPLAY=localhost:0.0
    # auto run vcxsrv
    if [ -z "$(tasklist.exe | grep vcxsrv)" ]; then
        cmd.exe /c config.xlaunch
    fi
fi

Tmuxをvimモードで使う

コピーモードのキーバインドをviにするため、.tmux.confに設定を追加します。
Macでは、reattach-to-user-namespace pbcopyでクリップボードに渡しますが、WSLの場合は使えません。
WSLではclip.exewin32yank.exeを使う方法があるようですが、XサーバとしてVcXsrcをインストールしていれば、Linuxと同様にxselが使えます。

.tmux.conf
setw -g mode-keys vi
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel -ip && xsel -op | xsel -ib"
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xsel -ip && xsel -op | xsel -ib"

viキーバインドにしておくと、prefix+[の後でvimの検索機能が使えて便利です。

Vimのクリップボード連携

WSLのデフォルトのvimはUbuntuのデフォルトのvimと同じくvim-tinyで、クリップボード連携が使えないです。
sudo apt install vim-gnomevim-gnomeをインストールして、.vimrcに以下を追加してください。

.vimrc
set clipboard=unnamedplus

その他

WSLの再起動

WSLのtmuxはたまに暴走するのでプロセスをkillしたくなりますが、暴走するとWSLコンソールからkillできなくなります。その場合は、Windowsのタスクマネージャーでプロセスを直接おとすか、WSLを再起動すればいいです。WSLの再起動はWSL上からはできなくて、コマンドプロンプトでwsl --terminate Ubuntuとたたく(Ubuntuはディストリビューション名)。

リファレンス

37
36
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
37
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?