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
でこの設定ファイルを実行するようにしておくと便利です。以下では、多重起動も禁止しています。
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.exe
やwin32yank.exe
を使う方法があるようですが、XサーバとしてVcXsrcをインストールしていれば、Linuxと同様にxselが使えます。
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-gnome
でvim-gnome
をインストールして、.vimrc
に以下を追加してください。
set clipboard=unnamedplus
その他
WSLの再起動
WSLのtmuxはたまに暴走するのでプロセスをkillしたくなりますが、暴走するとWSLコンソールからkillできなくなります。その場合は、Windowsのタスクマネージャーでプロセスを直接おとすか、WSLを再起動すればいいです。WSLの再起動はWSL上からはできなくて、コマンドプロンプトでwsl --terminate Ubuntu
とたたく(Ubuntuはディストリビューション名)。