zsh-通过 ssh 进行光标位移

zsh-通过 ssh 进行光标位移

我在本地运行 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没有设置。我现在设置了,并且有效!

相关内容