Windowsのcatは何かと使いづらい。UTF-8なのかShift JISなのかで挙動が変わるし、ターミナルの文字エンコーディングに左右される。
batを使うと、そうしたことは綺麗に解決できる。する。 cargo install bat でインストールできるので手軽に使えるし、Releasesよりバイナリを配置してインストールもできる。
https://github.com/sharkdp/bat
ただ、このままだとページャーが働いてしまってcatと挙動が異なってしまうので、bat -pP とするとcatに近い挙動になる。これでだいぶシェルライフが快適になり、日本語交じりのファイルがあっても怖くなくなる。
シンタクスハイライトも効くし、パイプに渡してもcatと同じ挙動になるので、自分は完全に置き換えてしまっている。例えばnushellなどでは alias cat = bat -pP とすれば、cat自体を置き換えることができる。
Powershellの場合は、以下のようにするとよいと思う。動作確認はしていないので注意。(参考記事 (Qiita))
function cat(){
bat -pP $args
}