我在本地运行 Arch Linux。当我通过 连接到远程 Debian 10 服务器时ssh
,光标的行为方式很尴尬:
只要每个命令返回状态码 0,一切都很好。当返回另一个代码时,光标和右侧提示符向左移动2个字符,如下所示。第一个提示是正常的,按Ctrl+C后第二个提示:
----|---------------------------------
~ » user@hostname
--|-----------------------------------
~ » 130 ↵ user@hostname
之后我手动更改了破折号线以显示光标所在位置:在|
.事实上,»
当我开始输入命令时,我会覆盖它。
然后,当我尝试使用历史记录中的命令并更改它时,我将其更改为与屏幕上显示的不同的字符,这非常令人困惑和烦人。
在下一个返回状态码0的命令之后,光标再次正常。
这似乎是跨终端发生的(我在控制台中尝试并使用 Alacritty 和 URXVT)。
我正在使用“af-magic”主题。当我切换到另一个不显示状态代码的主题时,问题就消失了。对于其他确实显示状态代码的主题(例如“smt”),情况也是如此。因此,有关状态代码显示的某些内容似乎导致了该问题。
我的.zshrc
本地和远程都是一样的。在本地,我没有这个问题。
HISTSIZE=1000000
SAVEHIST=1000000
HISTFILE=~/.cache/zsh/history
## oh my zsh
export ZSH="$HOME/.config/zsh/oh-my-zsh"
ZSH_THEME="af-magic"
plugins=(
git vi-mode zsh-autosuggestions history-substring-search
)
ZSH_DISABLE_COMPFIX="true"
source $ZSH/oh-my-zsh.sh
## Load aliases
[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc"
## vim mode config
# ---------------
bindkey -M vicmd 'k' history-substring-search-up
bindkey -M vicmd 'j' history-substring-search-down
# Activate vim mode.
bindkey -v
# autosuggest config
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#3a3a3a"
bindkey '^ ' autosuggest-accept
# Remove mode switching delay.
KEYTIMEOUT=5
# Change cursor shape for different vi modes.
function zle-keymap-select {
if [[ ${KEYMAP} == vicmd ]] ||
[[ $1 = 'block' ]]; then
echo -ne '\e[1 q'
elif [[ ${KEYMAP} == main ]] ||
[[ ${KEYMAP} == viins ]] ||
[[ ${KEYMAP} = '' ]] ||
[[ $1 = 'beam' ]]; then
echo -ne '\e[5 q'
fi
}
zle -N zle-keymap-select
_fix_cursor() {
echo -ne '\e[5 q'
}
precmd_functions+=(_fix_cursor)
关于如何解决这个问题有什么建议吗?
答案1
我的locale
没有设置。我现在设置了,并且有效!