追加読書

追加読書

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)

xtermWindowsで実行されているPutty、ターミナルタイプ、およびUTF-8変換モードを使用して、2台のコンピュータのいずれかに接続します。

私のzshrcファイルはほぼすべて通常のOhMyZSHテンプレートなので、プロンプトをdieterシステムAに変更してpowerlevel-9k[https://github.com/bhilburn/powerlevel9k]Bマシンで

マシンA(別名「悪い」マシン)で観察した内容

コマンドラインを編集するときにカーソルキーLeftRight押すと(単一文字ではなく)単語全体が移動されます。

HomeキーをEnd使用すると、期待どおりにカーソルを行の先頭と最後にインポートします。

説明された動作はemacsモード(bindkey -e)に適用されます。

vimモード(bindkey -v)に入るとLeft矢印Rightは1文字移動しますが、HomeキーEndはカーソルを行の先頭と最後に移動しません。代わりに、カーソルの下にある文字の大文字と小文字を切り替えます。

マシンB(別名「良い」マシン)で観察した内容

Leftキーを押すとカーソルがRight1文字移動します。 HomeキーとEndキーは、カーソルをそれぞれ行の先頭と終わりに移動します。Ctrl+ACtrl+Eの組み合わせは、それぞれカーソルを開始と終了に移動します。

これはすべてのシェルが欲しい動作です。

私が今まで見つけたもの

私はこれがbindkey問題だと思います。しかし、私はそれについてほとんど何も知らず、zshこの組み込み機能に関する文書を見つけるのに苦労しています。

ファイルは似ていますが、両方のコンピュータで実行すると、ログインzsh -v時に非常に異なる結果が生成されます。.zshrc

誰かがこれら2つのコンピュータが異なる動作の原因と一貫性を回復し、すべてのシェルがコンピュータB(別名「良い」コンピュータ)にあるかのように動作するように設定を変更できる方法を説明できますか?

私が知らない追加情報が必要な場合は、私たちに教えてくれると確信しています。

非常にありがとう

答え1

端末タイプを次のように構成する必要があります。puttyputty-256colorまたはputty-scoPuTTYを使用するとき。 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-mo​​deコマンドに分割して挿入モード()を終了して置き換えます。現在の文字(~)の

追加読書

答え2

JdeBPが親切に指摘したように、TERM設定が間違っています。

最後に、次の手順を実行してすべてを一貫して維持することができました。

  1. Puttyの端末タイプを次のように設定します。putty
  2. Puttyでカーソルとキーボードのアプリケーションモードを無効にする
  3. .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文字を移動できます。

関連情報