为什么 CTRL-r 在 OS X 上表现怪异(仅显示部分命令)

为什么 CTRL-r 在 OS X 上表现怪异(仅显示部分命令)

Ctrl+r是一个很棒的小工具,可以用来搜索.bash_history以前运行过的命令。

但是,当我在 OS X Terminal.app 中使用它时,我看到了奇怪的行为,我想知道是否有其他人看到同样的情况或知道如何修复它。

  1. Ctrl+r
  2. 输入类似find
  3. 哦,太酷了,看...这就是我想要的命令find . -exec grep -q "hello world" '{}' \; -print
  4. 我想运行该命令,但将 hello world 更改为其他内容。
  5. 所以我打了
  6. 现在,命令行上的命令有点类似,但它看起来总是像命令的某个截断版本,如下所示:-q "blog_posts_by" '{}' \; -print,其中有完整的命令,我可以使用光标键在行上移动,但并非所有命令都会被打印出来。行上显示的内容与终端实际认为我正在编辑的内容之间存在脱节。

有人知道为什么会发生这种情况吗?在网上搜索这种现象并不容易。

答案1

您的提示中的颜色转义序列可能未正确分隔。它们需要括在\[和中\]

PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\]\$ `

当非打印字符序列被这样括起来时,它们的长度不包含在提示符的长度中,并且当它们换行时,需要计算先前命令的位置才能正确显示。

答案2

这可能是由于您的终端上的退出键配置方式所致,我通常会使用 iTerm 或 Terminal.app 上的左箭头或右箭头,因为我不喜欢立即按回车键,这对您有用吗?

答案3

导致此问题的另一个可能原因是值错误TERM。例如,当我在 PS1 中使用颜色时发生了这种情况,但我的TERM设置为xterm。我将其更改为xterm-256color,然后 CTRL-r 又开始正常工作了。

答案4

对于那些在 Google 中发现这个问题的人来说 - 在现代 MacOS 中,当使用时zsh,转义序列不是\[...\],但是%{...%}

对 OP 的正确提示是:

PS1='%{\033[1;36m%}\u%{\033[0m%}@%{\033[1;34m%}\h%{\033[0m%}\$ `

相关内容