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