zsh - SSHを介したカーソルの移動

zsh - SSHを介したカーソルの移動

私はArch Linuxをローカルで実行しています。以下を介してリモートDebian 10サーバーに接続するときssh

すべてのコマンドがステータスコード0を返す限り、すべてが正常です。別のコードが返されると、次のようにカーソルと右のプロンプトが左に2文字移動します。最初のプロンプトは正常で、Ctrl + Cを押した後、2番目のプロンプトは次のようになります。

----|---------------------------------
~ »                    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設定はありません。今設定しましたが動作します!

おすすめ記事