![终端中的物理缓冲区与 oh-my-zsh 配置中的显示不一致](https://linux22.com/image/12657/%E7%BB%88%E7%AB%AF%E4%B8%AD%E7%9A%84%E7%89%A9%E7%90%86%E7%BC%93%E5%86%B2%E5%8C%BA%E4%B8%8E%20oh-my-zsh%20%E9%85%8D%E7%BD%AE%E4%B8%AD%E7%9A%84%E6%98%BE%E7%A4%BA%E4%B8%8D%E4%B8%80%E8%87%B4.png)
我在 oh-my-zsh 配置中遇到了一个不寻常的问题,其中光标与文本不同步。 (我通常在工作screen
中使用konsole
.
例如,在新的终端行上,提示符上没有输入任何内容,光标在几秒钟后无缘无故地向前移动。就好像提示的起始位置向前移动,就像某个鬼魂所做的那样。
另一个特点是无法退格到第一个光标位置,并且无法退格到该位置的字符。
我看到的方式是,光标和显示的文本的视觉位置与正在编辑的文本的物理缓冲区内的实际位置不一致。
例如。假设我help
在终端输入,然后使用向上箭头键获取上一个命令,该命令应该是help
.似乎发生了一些事情,结果是当我退格时,help
我只能退格到仍然显示的e
位置h
,但实际上物理缓冲区中的整个单词help
都会被清除。因此,如果我想help
再次输入,屏幕将显示hhelp
,但按下回车键后,命令help
将被执行。不会的hhelp
。
它只发生在根帐户上,尽管我确信我对根用户和最终用户使用相同的设置。
最终结果是,如果abcde
在屏幕上显示 并退格,c
我更有可能退格b
,留下acde
而不是abde
。
有任何想法吗?
更新:
这是与评论相关的附加信息。
我的提示是%{%f%b%k%}$(build_prompt)
.普通账户和root
's 账户都是一样的。但问题仅出现在root
帐户中。
答案1
我在 oh-my-zsh 中遇到了这个问题,docker
并通过以下行解决了它Dockerfile
:
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
如果您直接在主机上运行,请尝试执行该步骤中的操作RUN
并使用export
导出环境变量。
要使更改永久生效,您可以将导出语句放入您的~/.zshrc
.
要测试这是否有效:
print -l -- '+--+' '|\u26A1|' '+--+'
应显示: