ConEmu と Cmder を使ってみたけど GitBash に戻った

これまで Windows 環境では ConEmu を使って Git For Windows ないしは Git SDK を動かしていた。

しかし、tmux を導入するにあたって不具合が多く、色々と試した結果、「標準の GitBash (git-bash.exe) が最善なんじゃねえの…?」となったので、その軌跡を残しておく。

目次

ConEmu の動作

ConEmu で tmux の表示がバグる

以下の記事で紹介した Task 定義で、ConEmu から GitBash を開いてみた。

set "PATH=C:\git-sdk-64\usr\bin;%PATH%" & "C:\git-sdk-64\git-cmd.exe" --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe /usr/bin/bash.exe -l -i -new_console:p%

↑コレ。元はというと以下の記事で書いたように、256色表示とかを上手くやるための conemu-msys2-64.exe (cygwin-connector) を噛ませて bash.exe を起動している。

この状態で tmux を開くと、画面がどんどん上にスクロールしていくかのような描画になり、画面がバグってまともに使えない。

また、tmux を使っていない通常時も日本語 (全角) 文字を入力したり消したりしているとカーソル位置がおかしくなるバグがあり、かなりつらい。

違う Task 定義で動かすと tmux が使えなくなる

続いて、以下のような Task 定義に修正してみた。

set "PATH=C:\git-sdk-64\usr\bin;%PATH%" & cmd /c "C:\git-sdk-64\usr\bin\bash -l -i" -new_console:p

コチラは Windows コマンドの cmd /c コマンドを使い、直接 bash.exe を実行している。

コレでターミナルを起動すると、日本語入力時にカーソル位置がバグる問題は解消するが、tmux を起動しようとすると以下のようなエラーが出てしまう。

$ tmux
open terminal failed: not a terminal

どうも $TERMxterm-256color ではなく cygwin になっていることが原因っぽいが、環境変数を後から書き換えたりするだけでは使えるようにできなかった。

Cmder

ココで登場したのが Cmder。ConEmu を改良したモノに、Git For Windows を同梱しているというツール。

内部的には ConEmu なのだが、細部が異なっている。例えば、同梱されている cygwin-connector conemu-msys2-64.exe の詳細を見ると、バージョン番号が違う。

両者でファイルを入れ替えて使ってみたりしたが、正常に起動しなくなるため、Cmder 特有の調整が入っているようだ。

ConEmu で発生する日本語文字の表示が崩れる問題が、Cmder だと発生しなくなる、ということで入れてみた。

cygwin-connector を挟んでいると、tmux は正常に動作するが、日本語入力がバグる

さて、cygwin-connector 入りの Task を Cmder で使ってみる。すると、tmux が正常に動作した。

tmux の罫線が消えたりする問題は、僕がお気に入りで使っている MeiryoKe などの和文フォントではなく、Consolas や Menlo など英文フォントを指定すれば回避できる。

コレはやったか?!と思ったら、日本語入力時のバグり方が ConEmu よりひどい。

事象は上の記事のスクショを見てもらうと分かりやすいだろう。

コマンドプロンプトの設定で従来のコンソールを使うのチェックを入れると何故かなおる。

というのもやってみたが、直らず。

実は cygwin-connector 自体の GitHub Issues に、CJK 文字に関するバグは挙がっているのだが、対応がされていないようなのだ。

コレまでのどこかのタイミングでは、Windows OS 側と何か上手く都合が付けられるタイミングがあり、不具合が解消できたのかもしれないが、本稿執筆時点では上手く制御できなくなっていた。日本語が壊滅的に使えないのはダメだなぁ…。

cygwin-connector を挟まないとやっぱり tmux が使えない

それでは cmd /cbash.exe を直起動したらどうかというと、日本語入力はバグらずできるようになるが、代わりに ConEmu 同様 tmux が起動できなくなる。

GitBash

それじゃあ Git SDK に同梱の GitBash (git-bash.exe) の動きも見ておこうか、ということで試してみた。

tmux は難なく起動する。罫線が崩れる件は英文フォントを指定することで回避。

英文フォントにない日本語文字は、フォントリンクというレジストリをイジってやれば、お気に入りなメイリオ改を使わせたりできるのだが、なんだか間延びして表示されていて、実害はないが見た目がダサい。

見た目のダサさはおいておくと、日本語入力してもカーソル位置がバグったりしないし、tmux も動作する。一番実害が少なく使えるソフトは、GitBash だったのだ…。

3者のまとめ

ということで3者の挙動をまとめる。

ソフト情報 接続方式別の挙動
ソフト名 タブ機能 日本語描画 接続方式 日本語入力 tmux
GitBash × △ 汚い (崩れはなし) - ○ 正常 ○ 動作する
ConEmu ○ 正常 cygwin-connector 使用 × バグあり ○ 動作する
cygwin-connector 未使用 ○ 正常 × 起動しない
Cmder ○ 正常 cygwin-connector 使用 × ひどいバグ ○ 動作する
cygwin-connector 未使用 ○ 正常 × 起動しない

「日本語表示」は、いずれの環境も「Consolas」あたりの英字フォントを選択していることが前提。tmux の罫線記号も、日本語フォントを指定していると崩れやすい。この辺、日本語含めてターミナル利用で最適なフォントの決定版を見付けたいところ…。

GitBash はタブ機能がないが、tmux が一番まともに動く。ConEmu や Cmder は本体にタブ機能があり tmux 相当のことができるが、tmux を正常に動かせてかつ日本語入力もまともにできる環境はない。

色々と天秤にかけてみたけど、MacOS の「ターミナル.app」の「タブ機能」をどのくらい使うか考えたところ、結局「ウィンドウ」に分けて使うことの方が多いので、別にソフト側がタブ機能を持たなくても良い気がしてきた。

そもそも GitBash なら本体付属でポータブルだし、ConEmu や Cmder のような別ソフトをさらにいれる手間は省ける。日本語の文字が汚いのが難点だが、Windows VSCode のターミナルだとマシだから、より使用頻度の少ないターミナル本体は GitBash で良いかな、と思うことにした。

.minttyrc を本腰入れて直しておく

つーわけで、tmux を使うために ConEmu と Cmder を捨て、Git SDK に統一することにした。

ついでに .minttyrc をイジって、MacOS ターミナルの「Homebrew」カラーをもう少しドギツくしたカラーリングにしてみた。フォントは Consolas を使うと日本語もまぁまぁ見られる。

# ================================================================================
# .minttyrc
# ================================================================================

Charset  = UTF-8
Language = ja
Locale   = ja_JP

Columns  = 120
Rows     = 25

Font          = Consolas
FontHeight    = 11
FontWeight    = 700
FontIsBold    = yes
FontSmoothing = full
BoldAsColour  = yes
BoldAsFont    = yes

AllowBlinking     = yes
CursorType        = block
OpaqueWhenFocused = yes
Term              = xterm-256color
ThemeFile         =

ForegroundColour = 240,240,240
BackgroundColour =   0,  0,  0
CursorColour     = 240,240,240
Black            = 100,100,100
BoldBlack        = 100,100,100
Red              = 240,  0,  0
BoldRed          = 240,  0,  0
Green            =   0,220,  0
BoldGreen        =   0,220,  0
Yellow           = 255,255,  0
BoldYellow       = 255,255,  0
Blue             =   0,140,255
BoldBlue         =   0,140,255
Magenta          = 255,  0,240
BoldMagenta      = 255,  0,240
Cyan             =   0,240,240
BoldCyan         =   0,240,240
White            = 255,255,255
BoldWhite        = 255,255,255

GitBash がちょうどいい

以上!