tmux 在 OSX 上显示奇怪的编码历史记录

tmux 在 OSX 上显示奇怪的编码历史记录

如果我在 tmux 中执行“history”命令,我会得到非常奇怪的结果。有人能提示一下如何才能获得正常输出吗?

输出如下所示:

  477  ◆┬▒⎺▒└☃◆ 
  478  c▒├ ◆┬▒⎺▒└☃◆
  479  ec▒⎺ ◆┬▒⎺▒└☃◆
  48▮  ┴☃└ ·/↓├└┤│↓c⎺┼° 
  481  ├└┤│
  482  ┌⎽
  483  cd ┐⎺▒┼⎽/
  484  ┌e☃┼ ┐⎺▒┼⎽ ⎼┤┼
  485  ┌⎽
  486  ┌e☃┼ ▮1_e─┤▒┌☃├☃e⎽↓c┌┘ ⎼┤┼
  487  cd ↓↓
  488  ┌e☃┼ ┐⎺▒┼⎽ ⎼┤┼
  489  cd ┐⎺▒┼⎽/
  49▮  ┌e☃┼ ┐⎺▒┼ ⎼┤┼
  491  ┴☃└ ▮1_e─┤▒┌☃├☃e⎽↓c┌┘ 
  492  ▒☃⎽├⎺⎼≤
  493  ┌e☃┼ ┐⎺▒┼ ⎼┤┼
  494  ├└┤│ ┌⎽
  495  ├⎺⎻
  496  ▒☃⎽├⎺⎼≤
  497  e│☃├
  498  e│☃├
  499  ▒☃⎽├⎺⎼≤
S⎼e┼⎽↑M▒cB⎺⎺┐↑P⎼⎺↑2:· S⎺e⎼e┼$ 

我猜这与编码有关。

我在使用 OSX Lion 10.7.5 的 MacBook Pro 上。

我正在使用终端应用程序,该应用程序启用了 UTF-8 编码,并在“国际 - 字符编码:”下启用了 UFT-8。

我的shell是bash。

我的 tmux 是tmux -Vtmux 1.9a。

在我的~/.tmux.conf/,我有

set-option -g          prefix ^Space
bind-key ^Space        send-prefix
unbind C-b
set-option -g          status-fg white
set-option -g          default-command "reattach-to-user-namespace -l bash"
set -sg                escape-time 1
set -g                 base-index 1
setw -g                pane-base-index 1
bind r                 source-file ~/.tmux.conf
set-window-option -g   utf8 on
set -g                 utf8
set -g                 status-utf8 on

我的languagesetup语言是英语,但我是丹麦人,我的键盘布局也是 :) 这只是在我语言languagesetup不是英语的时候才会出现问题 - 具体来说,使用我的丹麦管道符进行管道传输|意味着如果我在管道符和管道符之间写了一个空格,bash 将无法识别管道符后的命令,因此我不得不这样做

echo $PATH |less

而不是

echo $PATH | less

但正如我所说的,我用 解决了这个问题languagesetup

我真的很想使用 tmux,所以我希望有人知道如何修复它!:)


编辑1:

原因:

奇怪的输出是因为我的历史记录中有 ^N(Ctrl + n 组合键的输出)。如果我在 tmux 中按下 Ctrl + n 然后按 Enter 键,则可以故意强制产生奇怪的输出。我在 tmux 的 SourceForge 页面上提交了一张票,以防它是一个错误:https://sourceforge.net/p/tmux/tickets/137/ 所以,没有 ^N,没有奇怪的输出!


编辑2:

欲了解更多有趣的细节,请查看评论:)


编辑3:

在向 tmux 开发人员提交错误报告后https://sourceforge.net/p/tmux/tickets/137/,我被告知 ^N 的效果不是一个错误。它是硬件终端在 utf-8 之前的旧时代的一项功能,开发人员使用控制字符切换字符集,以便访问更广泛的字符。^N 会“移出”,^O 会“移入”,即返回原始字符集。在 Terminal 或 iTerm 中按 ^O 对我来说没有任何作用,这是因为 ^O 被重新映射到“丢弃” - 这可以通过运行看到stty -a。但是,在执行 ^N 之后,您可以运行 shell 脚本printf '\x0F',该脚本输入 ^O 应该产生的控制字符,当您“移入”时,输出将恢复正常。

相关内容