Mac OS X terminal.app有时会开始以不同方式解释换行符!这可以修复吗?


1

几次,我已经让Mac OS X终端处于奇怪的状态,因此新行不会像通常那样被解释。就好像他们在做换行部分,而不是回车。例如,我通常会看到这样的事情:

% git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#

但是当终端以这种奇怪模式结束时,我得到了这个:

% git status
# On branch master
                  # Untracked files:
                                    #   (use "git add <file>..." to include in what will be committed)
                                                                                                      #

我可以创建一个新的终端窗口来解决这个问题,但这有点烦人。如果可能的话,我想保持同一个窗口处于活动状态,以防我在回滚缓冲区中需要一些东西。当这样的问题出现时,我能做些什么来解决问题吗?

(我不知道它是否相关,但我通常会在退出emacs时得到这个。我不时地做错了,并且偶然选择另一个命令而不是 C-x C-c。在我意识到发生了什么之前,我的手指取消了它,所以我不知道它可能是哪个命令,但是一旦emacs消失了,终端就处于这个有趣的新模式。)

Answers:


3

当此问题再次出现时,请在终端中发出以下命令:

reset

这应该将您的终端重置为默认值,并希望解决您的问题。


2

当早期终端(和打印机)接收到LF(ASCII 10)字符时,它们会将光标(打印头)推进到下一行而不会水平移动它。因此,仅由LF分隔的一系列字符/单词将形成看起来像楼梯的情况。这就是你所看到的。

当程序想要移动到下一行的开头时,它们会将CR(ASCII 13)和LF设置到终端。 CR将光标移动到当前行的开头,LF前进到下一行。

Unix系统上的tty驱动程序具有可选的输出后处理功能,通常可以将输出LF转换为CR和LF的组合。

您看到的问题是您的终端仿真器正在使用的tty已禁用此部分输出后处理。您可以使用以下命令重新输出输出后处理和LF→CR LF转换:

stty opost onlcr

这种类型的输出处理通常在“全屏”基于终端的程序中被禁用,以便它们能够更好地控制光标。因此,如果这样的程序以无法恢复tty设置的方式崩溃(或被杀死),那么您可能最终处于“阶梯模式”。由于在发生此类崩溃后可能会影响其他tty设置,因此您可能需要更彻底的清理效果。您可以使用以下命令将当前tty的设置重置为合理的默认值:

stty sane

reset 命令做了很多 stty sane 确实以及向终端仿真器发送各种复位/初始化控制序列。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.