^C 字符位于换行符 bash 命令编辑的开头

^C 字符位于换行符 bash 命令编辑的开头

我在bash.如果全部以下说法正确的是...

  1. 我的(单行)提示特别长。
  2. 终端窗口相对较窄。
  3. 我按 Ctrl+C 退出上一个进程,因此它^C显示在该行的左侧。
  4. 我正在编辑的命令换行到下一行。

……然后编辑就搞砸了。我最终替换了与我认为正在编辑的字符相比偏移 2 个位置的字符。

如果在步骤 4 中输入跨多行的命令(而不是按向上键),也会发生类似的情况。我可以退格到上一行,然后删除提示符中的两个字符。

基本上是这样的:

(Some output)
^Cuser@host:~/path/to/somewhere $ some long command
that wraps

^C被出现在行开头的打破。

我尝试了一些其他命令(例如sleep 30),并且^C单独出现在一行上,并且提示符出现在下一行上。这似乎只发生在节点.js: node some_command_that_wraps.js

如果它很重要,我有一个颜色鲜艳的、git 集成的PROMPT_COMMAND.您可以在以下位置找到它:github,以防万一我做了一些愚蠢的事情。

更新

我的 PS1(例如)设置为(我稍微包裹了一下):

\[\e]0;\u@\h:\w\a\]
\[\e[0;93m\]\u@\h\[\e[0;96m\]:\w 
\[\e[0;97m\]{\[\e[0;94m\]master\[\e[0;92m\]\[\e[0;91m\] ~1\[\e[0;97m\]}
\[\e[0m\]\[\e[0;96m\]\$\[\e[0m\]

...显示(更多颜色):

roger@roger-p5q:~/Source/rlipscombe/bash_profile [master ~1] $ 

据我所知,转义字符是正确的不可数的(使用\[.. \])。

我该如何:

  • 让 bash 检测^C并移动到下一行?或者
  • 不会搞乱命令编辑吗?

答案1

如果您只是想要一个解决方案以便继续工作;在这种情况下,我只需按一次或两次 Enter 键,就会得到一个干净的提示。

如果以前的一些输出导致了“奇怪”字符的混乱,我也可能会发出重置命令。

如果你真的很好奇并且需要找出根本原因,恐怕我从来没有弄清楚 readline 的这些特殊复杂性......

相关内容