答案1
设置TERM=ansi
不会很好地工作,因为tmux
它仅设计用于处理终端描述中找到的转义序列screen
。
如果这样做infocmp ansi screen
,您可能会注意到这些行,显示终端能力哪个终端应用程序将使用,两个终端描述之间有所不同,但 tmux 和/或 iTerm2 在以这种方式误导时会错误处理:
ech: '\E[%p1%dX', NULL.
rep: '%p1%c\E[%p2%{1}%-%db', NULL.
rin: '\E[%p1%dT', NULL.
rmpch: '\E[10m', NULL.
rmacs: '\E[10m', '^O'.
smacs: '\E[11m', '^N'.
smpch: '\E[11m', NULL.
由于tmux混乱,无法保证什么可能会出现在显示屏上。
这同样适用于TERM=xterm
.该tmux
手册记录了这一限制。
设置TERM=vt100
很接近(用infocmp
来看),但大多数人都知道vt100从来没有ANSI颜色。
答案2
问题不在于终端仿真 - 保留 TERM 设置不变。
就是UI的那些部分使用的字符集是CP437,但你的终端设置为另一个字符集(可能是UTF8)。
您可以将 iTerm2 设置为使用 CP437(如果支持)(该设置位于“终端/字符编码”下),或者您可以使用cp437实用程序在 UTF-8 终端上模拟 CP437 终端。