Lev*_*sky 13 command-line bash arch-linux
Home如果我当前的输入足够短(比如 <36 个字符),当我点击时,它工作正常。但是,当我输入更长的命令然后想回到开头时,它似乎完成了它的工作,但该命令不再正确显示。看起来好像我不是一开始,而是大约 10 个字符。虽然如果我“盲目地”输入,它工作正常,但它看起来一团糟,好像整个输入向右移动,但没有重绘。所以我输入了它,但“事实上”不是,因为我“擦除”的地方“实际上”是右边的 10 个字符。因此,如果我尝试删除该命令,前 10 个字符仍会显示,但如果我点击Enter它,只会显示另一个提示,就像之前的输入为空一样。
我知道这不是有史以来最好的解释,但关键是 bash 认识到它并尝试做正确的事情,但经常失败。
我在 X 会话中的 tty 和终端中都重现了这一点。当我点击Ctrl+V然后Home我看到不同的序列(^[OH在 X 中,^[[1~在 tty 中),但两者似乎都在我的/etc/inputrc:
# do not bell on tab-completion
#set bell-style none
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
$if mode=emacs
# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[7~": beginning-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word
# for rxvt
"\e[8~": end-of-line
# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line
# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif
Run Code Online (Sandbox Code Playgroud)
echo $TERM显示linux在TTY和xterm在X会话。
它是
GNU bash,版本 4.2.24(2)-release (i686-pc-linux-gnu)
有人有这方面的线索吗?
jw0*_*013 14
你需要围绕你的提示与非印刷部分(包括但不限于逃避改变颜色序列)\[和\]。
您的原始提示:\e[0;36m[\u@\h \W]\$ \e[m
固定提示:\[\e[0;36m\][\u@\h \W]\$ \[\e[m\]
在\[和\]告诉bash之间实际上并没有打印到屏幕上的一切,即长度为零。需要计算出的提示长度才能知道在哪里回显您键入的字符。遗漏\[ \]原因bash来计算不正确的提示长度,这通常会导致奇怪的终端几何相关行为,因为bash的想法光标与现实不匹配。