◆ msys2 で python と python3 はどっちも python3 だけど違う
  ◆ python は msys の python3
  ◆ ptyhon3 は mingw の python3
◆ mingw 版は十字キーやタブキーの動きが異なる
  ◆ 入力中の行を超えて好きな場所まで移動して過去の表示を書き換えられる
  ◆ 一度十字キーを押してしまうと 実行すると構文エラー
  ◆ 履歴呼び出せないのもつらいし 癖で押してしまうと入力し直しなのもつらい
  ◆ タブキーはそのままタブ入力で補完ができない

msys2 の python REPL

msys2 で Python を実行するときは普段 python3 とコマンドを打って実行していました
py ファイルを実行する分には困ってなかったのですが REPL だと困る部分がありました

直前に実行したコードを一部変えて実行したいときに 「↑」 を押して履歴を呼び出して編集が基本なのですが それができません
ほとんどの REPL ツールではある機能ですし Linux (fedora) で実行した python3 だと問題なく使えてます
ですが msys2 ではカーソル移動すると画面上の好きな場所に移動できて 前の行を上書きすることができます
Insert モードでエディタを操作してる感じです
もちろんそんな操作をしたあとにエンターを押して実行したらエラーです

別の行を変えたときだけでなく 「←」 を押して戻って見た目上は正しくなるように修正してもエラーです
一度十字キーを押してしまうと内部的に制御文字が入ってるみたいで構文エラーになってしまいます
タブキーもタブが入力されてしまうので入力補完はできません

すごく不便なのですが msys2 の Windows 環境というちょっと特別なものだし仕方ないかと諦めてました

python と python3

あるとき shebang が書かれている python のツールを ./xxx という形式で実行して ちゃんと動かないので print を仕込んで確認したら思った挙動と違うことがありました
同じものを REPL で動かしてもそれとは結果が異なります

なんでこうなるかよくわからないけど 違いって 「python xxx」 か 「./xxx」 の違いくらいだったので調べてみたら shebang の指定は

#!/usr/bin/env python

これだと python3 ではなく python コマンドで実行しています
python だと python2 が動いてるのかなと納得していたのですが

user@win-pc MINGW64 ~
$ python --version
Python 3.7.2


user@win-pc MINGW64 ~
$ python3 --version
Python 3.7.2

なんで!?

どっちも python3 でバージョンも同じのようです
エイリアスなら動きが違う理由がよくわからないんだけど……

そう思ってコマンドの場所を見てみると

user@win-pc MINGW64 ~
$ type python
python is hashed (/usr/bin/python)


user@win-pc MINGW64 ~
$ type python3
python3 is hashed (/mingw64/bin/python3)

別物でした
python3 は /mingw64/bin ですが python は /usr/bin にいます
ということは python コマンドは msys の python3 で python3 コマンドは mingw の python3 です
そういえば両方入れていた気がしますが こういうコマンドの違いとは思いませんでした

msys のほうが求めてる動きだったのと シンプルに /usr/bin にいるほうがいろいろ良さそうだったので python コマンドを使うようにしました

普通に動いてる

その後 python コマンドで REPL を使うと なんか普通に履歴呼び出したり タブキーで補完したりできてます
おかしいのは mingw 版のみだったみたいですね
python 使うときは msys 版を入れたほうが良いと思います