web-dev-qa-db-ja.com

Preztoをインストールした後、Ctrl-矢印が機能しなくなりました

私はこれを.inputrcに持っています:

"\e[A": history-search-backward
"\e[B": history-search-forward
set show-all-if-ambiguous on
set completion-ignore-case on

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for Word moving
"\eOc": forward-Word
"\eOd": backward-Word
"\e[1;5C": forward-Word
"\e[1;5D": backward-Word
"\e[5C": forward-Word
"\e[5D": backward-Word
"\e\e[C": forward-Word
"\e\e[D": backward-Word

また、bindkey命令が定義されている.zprezto/modules/editor/init.zshには何も触れていません。

しかし、私が押すと CtrlLeft または CtrlRight ターミナル(URxvt)が点滅し、何も起こりません。一方、XTermでは機能します。 URxvtの問題のようです。

2
rubik

示されているキーバインディングは、xterm(およびxtermの動作をコピーするプログラム)用です。 urxvtrxvtの子孫であり、differentキーバインディングを使用します。デフォルトでは、 controlleft rxvt/urxvt送信の場合 escapeOd。あなたは実行することによってこれを見ることができます

cat -v

そのキーの組み合わせを入力します。 ^[Odとしてエコーします。同じ問題が他のカーソルキーにも当てはまります。

urxvtは、リソース設定keysym.symrxvtで導入された機能の拡張)を提供します。これは、可能これらの端末から送信されるキーを変更して、xtermにより厳密に一致させるために使用します。これは、次のようなリソース設定になります。

URxvt.keysym.Control-0xff51:    \033[1;5D

ここで(マニュアルページに示されているように)、Controlは修飾子であり、0xff51xevを使用して取得できるカーソル左キーのコードです。

すべてのキーを取得するには、各キー(および修飾子)のリソースを追加する必要があります。

参考文献:

1
Thomas Dickey

~/.inputrcファイルはbashのものであり、私が知る限りzshのものではありません。 readlineの動作を制御し、zshに相当するものは zle です。 bindkey コマンドを使用して、その動作を変更できます。

だから、取得するには CtrlLeft そして Right 戻って、これらの行を~/.zshrcに追加します(~/.inputrcと同等の、より良い場所があるかもしれませんが、私にはわかりませんが、~/.zshrcは機能します):

bindkey "\eOc" forward-Word
bindkey "\eOd" backward-Word
bindkey "\e[1;5C" forward-Word
bindkey "\e[1;5D" backward-Word
bindkey "\e[5C" forward-Word
bindkey "\e[5D" backward-Word
bindkey "\e\e[C" forward-Word
bindkey "\e\e[D" backward-Word
5
terdon