💨
Windows Powershell環境でtmuxを使うツールを公開しました
Windows Powershell環境でtmuxを使うツールを作りました
Windows Powershell環境で、tmuxを使ったペイン操作をしたい方のための記事です。
タイトルは正確ではなく、正しくは以下です。
WSLで動かすtmux上で、ホスト側のPowershellを扱うツール
※ 後述しますが、セッション管理などのマルチプレクサ機能は現状扱えません。
はじめに
本記事で紹介するツールは、こちらのSuperUsern内のNotTheDr01ds氏による書き込み に基づいています。これを今日の環境で動作するように修正し、セットアップを自動化したものです。
想定ユーザ
以下のような方々が対象です。
- WindowsネイティブのPowershellで作業をする必要がある
- WSL上のPowershellではうまく動かない伝統ののps1
- ネイティブのdotnetでしかビルドできないC#プロジェクト
- Windows Terminal等のペイン操作に不満がある
- Leaderキーを定義したい
- Macなどtmuxのある他環境とキーバインドを統一したい
使い方
インストール方法
以下のコマンドを実行して、ツールをインストールします。
powershell -ExecutionPolicy Bypass -c "iwr https://raw.githubusercontent.com/ymat19/PoshOnTmux/main/install.ps1 -UseBasicParsing | iex"
起動方法
インストールが完了すると、以下のコマンドで起動できます。
wsl -d PoshOnTmux
また、Windowsターミナルなら再起動すると勝手にプロファイルが追加されます。
Ctrl-b %
などしてペインが出てきたら正しくインストールできてます。
設定ファイル
設定ファイルは次の場所にあります。
\\wsl$\PoshOnTmux\home\tmux\.tmux.conf
アンインストール方法
以下のコマンドでアンインストールできます。
wsl --unregister -d PoshOnTmux
補足
本ツールが何をしているのか
このツールは、次のステップで動作します。
- WSL1でAlpine Linuxインスタンスを立ち上げる
- tmuxでWindows側のPowerShellを起動
※ 私自身、最近まで知らなかったので補足ですが、WSLはexeを叩くとホスト側で実行してくれます。
なぜWSL1なのか
WSL2はWSL1の進化版のような名前ですが、実際は以下のように動作原理が異なります。
- WSL1
WindowsのカーネルAPIでLinuxのシステムコールを再現 - WSL2
ハイパーバイザ式の仮想環境でLinuxカーネルを用意
WSL1は互換性に問題があり、今ではWSL2が主流になりましたが、本ツールのようにシンプルなことをするだけならWSL1でも問題なく、さらにオーバーヘッドが小さく適してます。
PowershellはCore版?
Core版があればそれを起動します。なければプリインストールの方を立ち上げます。
制限事項:できないこと
-
セッションの維持ができない
ターミナルを閉じるとセッションが終了します。起動時は毎回新しいセッションを作成します。
参考にした元スクリプトでは、起動時に既存セッションに再接続するようになっていたのですが、試してみるとなぜかちょくちょく固まるので、コメントアウトしてます。
(tmuxやLinux側ではなく、Powershell側が固まっており、原因不明)
おわりに
最後までお読みいただきありがとうございました!
こういったツールを公開するのは初めてなので、不手際等あるかもしれません。
何か問題あればご指摘いただけると嬉しいです。
参考
Discussion