blog.euxn.me

Bash on Windows + cmderでまともなターミナルを獲得する(tmuxに関する追記有り)

2016-08-11 Thu.

2019/09/01 追記

現状では hyper や alacritty が十分安定しているのでそちらを使うのが良さそうです

2018/10/23 追記

現代では wsl-terminal などを使うか、X Server を立てて Linux 側のターミナルを使うのが良いです

2016/8/30 追記

この記事で紹介する cmder では tmux のマウスが動作しません。 tmux でマウスを使用する場合は、wslbridgeを使用した以下の記事のやり方で行うことを推奨します。tmux のマウスも動作します。

Big Sky :: Bash on Ubuntu on Windows の最高の端末環境を教えてやるからちょっと来い。

msys2 で wslbridge をビルドする際、gcc のバージョンによっては落ちるので、最新にしましょう。

tmux でマウスを使わない場合は、以下の cmder でのやり方がシンプルで簡単です。

やること

  • cmder を入れてまともなターミナルにする
  • cmder のデフォルトシェルを bash にする
  • bash でログイン時に zsh にする(オプション)

cmder 導入

cmderを入れます。 ssh クライアントではないので、Windows 内で動きます。 (Windows10 でなくても、これだけでだいぶまともになります。) full サイズ版には git bash 等もついてくるのですが、今回は ubuntu に繋がる bash.exe を使用するため、mini 版をインストールします。

cmder のデフォルトを bash にする。

cmder のタスクバー部分等の右クリックメニューから設定が開けます。

  • Startup > Tasks+ボタンをクリックして設定を追加します。
  • 名前をつけ、Hotkey やチェックはすべて空白にします。
  • 下の実行コマンドを指定する部分を以下のように指定してください。
"C:\Windows\System32\bash.exe ~"
  • Startup画面でデフォルトを指定します。Specified named task にチェックを入れ、先ほど bash.exe を設定したものを指定します。

その他、表示系は好みに設定してください。自分はタブやタスクバーを消したり、半透明にしたりしています。 標準の consolas でも shell の powerline がちゃんと表示されるようです。

zsh でログインするようにする(オプション)

bash on ubuntu では標準シェルを zsh にしていても、bash.exe からのログインでは/bin/bashが起動してしまうので、cmder 側で設定します。

設定のStartup > tasksで bash.exe を指定したタスクの実行コマンドを以下のように書き前ます。

C:\Windows\System32\bash.exe ~ -c "export SHELL=/bin/zsh && exec /bin/zsh -l"

環境変数 SHELL は tmux を起動する時などにも使用されるので、zsh にします。 exec /bin/zsh -lで zsh で再ログインします。

以前書いた:link: Windows10 の bash を zsh で起動するように変更するみたいなことはしなくても良さそうです。

Other Works
2024-12-01 Sun.
OpenAPI Spec を出力できる DSL、TypeSpec の実践例
- ドワンゴ教育サービス開発者ブログ

2024-11-16 Sat.
型付き API リクエストを実現するいくつかの手法とその選択
- TSKaigi Kansai 2024

2024-09-10 Tue.
corepack が標準同梱じゃなくなる未来、 mise でパッケージマネージャを管理する
- Zenn

2024-09-10 Tue.
言語環境の管理は *env や *vm を超えて、 mise へ
- Zenn

2024-06-28 Fri.
TypeSpec を使い倒してる
- Kyoto.js 22

2024-05-11 Sat.
Powerfully Typed TypeScript
- TSKaigi 2024

2024-05-10 Fri.
pnpm の node_modules を探検して理解しよう
- ドワンゴ教育サービス開発者ブログ

2024-03-17 Sun.
neverthrow で局所的に Result 型を使い、 try-catch より安全に記述する
- Zenn

2023-12-20 Wed.
レガシーブラウザ向けのビルドオプションを剪定する
- ドワンゴ教育サービス開発者ブログ

2023-05-26 Fri.
Next.js で dynamic import を使い Client だけで動かす Component を実現する
- Zenn

2023-05-02 Tue.
Node.js でファイル名から拡張子を取り除く/取り出すために path.parse を使う
- Zenn

2023-02-27 Mon.
WSL2 で外部からアクセス可能にするために bridge mode を有効にする
- Zenn

2023-01-26 Thu.
init.vim & dein から init.lua & lazy.nvim へ、シンプル設定で移行した
- Zenn

2023-01-13 Fri.
kindle の本をブクログ形式の csv でエクスポートする@2023初春
- Zenn

2023-01-10 Tue.
自宅サーバの移設に際して docker から nerdctl に移行した
- Zenn

2023-01-10 Tue.
自宅サーバを rootless に移行した際のトラブル対応
- Zenn

2021-11-11 Thu.
並列実行した Promise で throw されても全てハンドルしたいときの方法(allSettled, finally, etc...)
- Zenn