Emacs編集モードのZshには、主キーバインディング+カーソルのALT右側Backspaceの単語削除とALT+D左側の単語削除が付属しています。ALT+に後者の機能を追加したいですDEL。
terminfo
各キーの組み合わせに対してエスケープシーケンスを正しく設定するためにデータベースを使用しようとしています$TERM
。 Capnameになることman terminfo
を読んだときは、+kDC3
にその名前を使用する必要があります。ALTDEL
私のエントリに次の行を追加しました~/.zshrc
。
bindkey -e `tput kDC3` kill-word
$TERM
SSH(is)を介して自分のコンピュータに直接接続すると、これはうまく機能しますxterm
。ただし、Tmuxセッション($TERM
is screen
)でZshを起動すると、次のエラーメッセージが表示されます。
tput: unknown terminfo capability 'kDC3'
ALTこれは本当にTmuxで+に何もバインドすることが不可能であることを意味しますか?DELそれとも私が何か間違っているのでしょうか?もしkDC3
順序が間違っているのではないか?
私はDebian Wheezy Beta 4 x86_64を実行しています。
ベストアンサー1
最初の質問はあなたのものです用語情報項目に定義screen
された機能はありませんkDC3
。これは一般的です。この機能をカスタムscreen
項目に追加したり、コマンドのシーケンスを「ハードコード」したりできますbindkey
。
機能を追加すると、他のプログラムがキーについて学ぶのに役立ちますが、構成が断片化する可能性があります。設定を新しいコンピュータまたはユーザーアカウントに手動でコピーすると、このカスタマイズを忘れやすくなります。次のコマンドを使用して適切な項目を抽出し、infocmp
次を使用して新しい項目を構築できますtic
。
{ infocmp -xT screen ; infocmp -x1T xterm | grep -E '^\tkDC[3-8]?=' ; } >/tmp/s
tic -x /tmp/s
走ればチックterminfoディレクトリ(たとえば/usr/share/terminfo
)への書き込み権限を持つユーザーとして、新しいエントリがその場所に配置されます(元のエントリを上書きできます)。それ以外の場合、その項目は(またはその環境変数を設定した場合はTERMINFO)の下に配置されます~/.terminfo
。
(UP|DN|RIT|LFT|PRV|NXT|HOM|END|IC|DC)
完全性のために代わりに使用したいかもしれませんDC
。grepUp、Down、Right、Left、PageUp、PageDown、Home、End、Insert、およびDeleteの変更されたバージョンをキャプチャするモードです。
カスタムterminfoエントリが原因で構成された断片化が気に入らない場合は、値を「ハードコード」することができます。もう少し良い結果を得るには、kDC3
まず次のことを確認してください。
bindkey -e ${$(tput kDC3 2>/dev/null):-'\e[3;3~'} kill-word
screen
この「ハードコーディング」をTERM値のみに基づいて制限するには、次のようにします。
altdel=$(tput kDC3 2>/dev/null)
[[ -z $altdel && $TERM == screen(|-*) ]] && altdel='\e[3;3~'
[[ -n $altdel ]] && bindkey -e $altdel kill-word
unset altdel
端末エミュレータ(スタック)が最終的に生成されるとすぐxtermキーのスタイルの順序が修正されました。
xterm-keys
バインド後もオプションをオンにする必要があります。マルチプレクサこれにより生成されます。xtermそのウィンドウに渡されるキースタイルの順序。例えば~/.tmux.conf
:
set-option -wg xterm-keys on