ターミナルとしてConEmuを使っていて、そこからMSYS2のbashやzshを bash.exe --login のようにして呼び出して使っていました。
で、そこからvagrantを動かしているのですが、vagrant sshして入った先のemacsが画面が崩れて使えない、みたいなことが起きていました。
で調べてみるとConEmu+MSYS2のbashやzshで入る設定でTERMを確認すると
TERM=xterm-256color
になっており、これだと崩れてしまうことがわかりました。
ただ、ConEmu+Powershell等の環境から呼び出すと大丈夫であったため、確認すると
TERM=cygwin
となっており、TERMを「cygwin」等に指定にすれば良いということがわかりました。
そこでConEmu+MSYS2 bashを立ち上げた後
export TERM=cygwin
としてやってからemacs動かせば問題がないことを確認しました。
ただ、普通にスタートメニューからMSYS2のターミナルを開くとTERMが「xterm-256color」でも問題なく動くため、ConEmu+MSYS2の場合だと問題が起きるようです。
でそれについてさらに調べていると、
ConEmuからMSYS2のシェルを起動したときに256色対応させる - 水を見ると釣りがしたくなる
http://e8l.hatenablog.com/entry/2016/03/24/161206
MSYS2のシェルからansi color codeを上手にConEmuの方へ引き渡すコネクタプログラムを噛ませる必要がある
ConEmu | cygwin/msys terminal connector
https://conemu.github.io/en/CygwinMsysConnector.html
set MSYSTEM=MINGW64 & c:\tools\msys64\usr\bin\bash.exe --login -i
Change it to:
set MSYSTEM=MINGW64 & conemu-msys2-64.exe
ということで、コネクタプログラム経由にしないとxterm-256colorでの表示はうまくいかないそうです。
試してみると確かにこれでうまく動いてくれました。
ただ、そうするとzshではなくbashになってしまうのですよね。これはなにか方法あるのかな?
また、ConEmuのヘルプに起動時にTERMの指定が出来る記述
chcp 1251 & set TERM=MSYS & cmd
があったため、これでTERMの指定をcygwinにしてzshを動かせそうに思ったのですが、自分が試して見た限りではこれは動きませんでした。
で、この問題について色々と探しているときに、shellは「Nyagos」が良いというのをちょこちょこ見かけました。
Windowsのターミナル環境にCmderを使う 〜Nyagosとmsys2を添えて〜 - 長文書くところ
http://zenito9970.hatenablog.com/entry/2015/06/19/163701
このエントリではCmder+Nyagos+MSYS2ですが、自分の場合はConEmu+Nyagos+MSYS2で使ってみました。
こちらのコメントにもあるようにChocolateyでインストールできるので簡単に入ります。
確かにNyagos良い感じで、TERMもcygwinになるためそのままvagrant sshしても表示が崩れる問題は起きませんでした。
というわけでまとめると
- ConEmu + MSYS2 bash + vagrant ssh で崩れるのは TERM が「xterm-256color」になってるため
- MSYS2 bashかvagrant中でTERMを「cygwin」などにすれば崩れなくなる
- でもシェルをNyagosにしちゃったほうが快適
という感じでした。
(関連)
Windows用ターミナルアプリConEmuのフォント設定 - モーグルとカバとパウダーの日記
http://d.hatena.ne.jp/stealthinu/20130527/p1