この_OhMyZSH!
_問題の解決策を数日間探しましたが、解決策が見つかりません。確かに、私はzle
が実際にどのように機能するかを理解していません。bindkey
についても同じです。ターミナルエミュレータが「制御シーケンス」を送信する方法、および「ターミナルタイプ」の意味についても同じことが言えます(xterm
、対_xterm-256-color
_など)。 「アプリケーションモード」も同様
OhMyZSHの最新バージョンがインストールされているマシンが2台あります。コミット_c3b072
_:
zsh 4.3.6 (x86_64-suse-linux-gnu)
zsh 5.1.1 (x86_64-ubuntu-linux-gnu)
Windows上で実行されているPuTTYを使用して、端末タイプxterm
で、UTF-8変換モードでいずれかのマシンに接続します。
私のzshrc
ファイルはほとんどVanillaOhMyZSH
テンプレートであり、マシンAでプロンプトをdieter
に変更し、_powerlevel-9k
_ [ https: //github.com/bhilburn/powerlevel9k] マシンB上。
コマンドラインを編集すると、 Left そして Right カーソルキーは、(1文字ではなく)1つの単語全体を移動します。
Home そして End ただし、キーを押すと、予想どおり、カーソルを行の最初と最後に移動します。
この説明されている動作は、emacs
モード(_bindkey -e
_)の場合に適用されます。
vim
モード(_bindkey -v
_)に移動すると、 Left そして Right 矢印は1文字移動しますが、 Home そして End キーはカーソルを行の最初と最後に移動しません。代わりに、カーソルの下の文字の大文字と小文字を切り替えます。
Left そして Right キーを押すと、カーソルが1文字移動します。ホームキーとエンドキーは、カーソルを行の先頭と末尾に移動します。 Ctrl+A そして Ctrl+E コンボはカーソルを最初と最後に移動します。
これは、すべてのシェルに必要な動作です。
bindkey
の問題だと思います。しかし、私はそれについてほとんど何も知りません、そして私はこのzsh
ビルトインでどんなドキュメントも見つけるのに苦労しました。
ログイン時に両方のマシンで_zsh -v
_を実行すると、_.zshrc
_ファイルが類似しているにもかかわらず、結果が大きく異なります。
誰かが、これら2つのマシンの動作がこれほど異なる原因と、一貫性が回復し、すべてのシェルがマシンB(別名「良好」なもの)のように動作するように構成を変更する方法を説明できますか?
私が知らないより多くの情報が必要な場合は、私に知らせてくれると確信しています。
どうもありがとう
PuTTYを使用する場合は、端末タイプを PuTTY
、 PuTTY-256color
、または PuTTY-sco
として構成する必要があります。これらは、terminfoデータベースのエントリがPuTTYを正しく記述している唯一の端末タイプです。
ターミナルエミュレータがすべてXTermと互換性があり、terminfoデータベースのxterm
およびxterm-256color
エントリがそれらを正しく記述しているというのは、広く行き渡っている誤った仮定です。
この誤った考え ThomasDickeyのXTermFAQで指摘されています そしてxterm
およびxterm-256color
エントリは、他のターミナルエミュレータはもちろん、XTermのすべてのバージョンを記述しているわけではないことに注意してください。
M. DickeyによってハイパーリンクされたページなどのPuTTYのドコは、今日でも PuTTY
エントリがterminfoに追加されてから16年 、残念ながら、このxterm
端末タイプの誤用を助長していますが、誤用ですそれはそうです、そしてこれは発生するまさに一種のアプリケーションの誤動作です。
xterm-256color
とPuTTY-256color
のterminfoデータベースエントリを比較すると、 ⇱ Home そして ⇲ End キー:
%infocmp xterm-256color PuTTY-256color | grep -F kend kend: '\ EOF'、 '\ E [4〜'。 %infocmp xterm-256color PuTTY-256color | grep -F khome khome: '\ EOH'、 '\ E [1〜'。 %
ご覧のとおり、XTermを処理していると通知されたアプリケーションは、(端末から)制御シーケンス␛OH
を受信することを期待しています。 ⇱ Home キーと制御シーケンス␛OF
⇲ End キー。しかし、PuTTYは実際には代わりに制御シーケンス␛[1~
と␛[4~
を(それぞれ)送信します。
アプリケーションであるZシェルは、XTermキーボード制御シーケンスを予期しており(端末のタイプがxterm
であると誤って伝えたため)、PuTTY制御シーケンスを認識せず、実際にはそれらをvi
- modeコマンドに分解します。挿入モードを終了し(␛
)、現在の文字の大文字と小文字を入れ替えます(~
)。
JdeBPが親切に指摘したように、私のTERM
は間違って設定されていました。
私はついに、次の手順ですべてを一貫して機能させることができました。
PuTTY
に設定します.tmux.conf
ファイルに追加します。set -g default-terminal "$TERM"
tmuxがデフォルトでscreen
を使用しないようにするset -g terminal-overrides "PuTTY*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@"
Left そして Right キーは1単語ではなく1文字移動します