6年くらいcmderを使っていたのだけれど、Win11にメイン機をアップデートしたのをきっかけに Windows Terminal を使ってみることにした。参考: Windows 11の既定ターミナルは「Windows Terminal」に ~2022年中にも - 窓の杜
もう一つ理由があって、cmder で sqlite の select をしたときに文字化けするが、utf8 化したコマンドプロンプトでは生じないという状況が発生し、それがパッと対処できなかったのもある(詳細後述、sqlite3.exe の問題だったので cmder は悪くない)。
Windows Terminal はターミナルアプリなので、シェルとしては cmd とか powershell とか bash を使うことができる。
Q: たまに@
が入力されるんだけど
A: バグで、日本語キーボード特有のキーで@
が出力される。僕の場合は無変換キーでそれが生じていた。Microsoft IME の最新版を使っているとこのバグは再現しなかったのだがメカニズムが不明。Some keys on Japanese layout keyboards are incorrectly interpreted as @ · Issue #2206 · PowerShell/PSReadLine 直し方は分かってるので一応書いておいた。Set-PSReadLineKeyHandler (PSReadLine) - PowerShell | Microsoft Docs を使って回避する方法も考えたのだが、そもそも「無変換」キーを指定できないんだよね。"DownArrow" とかキーワードで指定できるようになってるから、.NET のConsoleKey を直接使ってるのかと思いきや、この実装よ…www→ https://github.com/PowerShell/PSReadLine/blob/dc38b451bee4bdf07f7200026be02516807faa09/PSReadLine/ConsoleKeyChordConverter.cs#L180
主に powershell を使う場合の情報を以下に記すが、結局いまは bash を使っている。powershell にも2種類あって云々って経緯は ASCII.jp:あらためて「PowerShell」の現状と登場後の経緯を整理するに詳しく書かれているが、デフォルトで設定されている方、僕の手元ではアップデートして7になっているが C:\Program Files\PowerShell\7\pwsh.exe
のことを以下powershellと呼ぶ。Windows への PowerShell のインストール - PowerShell | Microsoft Docs から最新版をインストールできる。
Q:cmdのスクリプトがパスだけでは実行されないのだが
A:startコマンドを使う。
Q:dir /s /b
みたいな cmd のコマンドが実行できないんだけど。
A:cmd /C dir /s /b
みたいに cmd に実行させればできる。powershell で dir
相当なのは Get-ChildItem
。
Q:起動時にエイリアスなどを読み込みたい
A:$PROFILE
にいろいろ設定すればいい。僕はwindows - List all folders and subfolders in a given structure with filesize - Stack Overflowにあるスクリプトを設定している。
Q: 設定画面がGUIじゃなくてjsonが表示されるのだけど
A: バージョンが古いとそうなる。Microsoft Store のライブラリから更新するとよい。
Q: nano とか使えたりする?
A: する Windowsでnanoエディタを使う - Qiita
Q: ssh クライアントとして使い物になるか?
A: 微妙。screenの挙動がすこしおかしくなったりする。hardstatusが二重になったり。putty -load [セッション名]
ですなおに putty を呼ぶコマンドのショートカットを alias として .bashrc に書いておくのがいいんじゃないかな(後述で関連の記述アリ)。
結局 wsl の bash をメインで使うことにした
wsl --install
すると bash もインストールされ、自動的に Windows Terminal にそれが登録される。git 使いなら Windows Terminal で Git Bash を表示する - Qiita という手もあるけど、日本語の表示がダメだったり色々使いにくいので bash を使うと決めたならちゃんと wsl --install
したほうがいい。その場合C://は/mnt/c/になるのでパスがややこしくなるが、それでも慣れたbashを使えるメリットは大きい気がする。
~/.bashrc
を編集して、pythonのaliasをつけたり get-pip.py
をつかって pip 入れたり、python はなるべく bash 側から使うように変更してみた。
Windows 機でのプログラム開発は Windows terminal + Windows Subsystem for Linux の Ubuntu で統一したら Windows 特有の問題でプログラミングでもなやまされなくなって良い気がする。
sqlite3.exe は shift-jis 環境で使うことが想定されている。
SQLiteのチケットでも書かれている通り sqlite.exe は shift-jis 環境で使うことが想定されている。だから、Windows Terminal でも完全なUTF8化として
# PowerShell Core7でもConsoleのデフォルトエンコーディングはsjisなので必要 [System.Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8") [System.Console]::InputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
from Windows TerminalとPowerShellでクールなターミナル環境をつくってみた
を実行すると sqlite の select 文の結果は文字化けする。そして cmder でも、 chcp 932
すれば文字化けは解消する。これは、接続してから PRAGMA encoding;
で確認できるsqlite のデータベース内の文字コード(デフォルトで utf8)とは別問題。
逆に上記の完全なutf8設定はどこで必要になるかというと、plink.exe をつかって linux サーバに接続した際など、この設定をしていないと文字化けする。そして、plink.exe で接続しても表示が変になったりする部分もあり、使い勝手があまりよくない。ssh だと問題が無いので、$PROFILE
によくつなぐ ssh へのエイリアスを書いたり、putty -load [セッション名]
で putty を呼び出すなどで対応するのが良いと思う。(ちなみに plink にはいろいろバージョンがあって、PLINK 1.9 は Download PuTTY: latest release (0.76) のplinkとは随分仕様が違う…、これで手間取ってしまった)