追加読書

追加読書

これマニュアルページfor binは構文の説明に関連付けられていないようで、bind -p人間が読める形式に変換しようとすると483から109までのゴミをフィルタリングできますが、それ以降は73しか理解できません。

bind -p 2>/dev/null \
| grep -vP "digit-argument|do-lowercase-version|not bound|self-insert" \
| perl -pe 's/\\e/[alt]/g;s/\\C/[control]/g' \
| grep -P "[\-\]].\""

"[control]-g": abort
"[control]-x[control]-g": abort
"[alt][control]-g": abort
"[control]-j": accept-line
"[control]-m": accept-line
"[control]-b": backward-char
"[control]-h": backward-delete-char
"[control]-?": backward-delete-char
"[control]-x[control]-?": backward-kill-line
"[alt][control]-h": backward-kill-word
"[alt][control]-?": backward-kill-word
"[alt]b": backward-word
"[alt]<": beginning-of-history
"[control]-a": beginning-of-line
"[alt]c": capitalize-word
"[control]-]": character-search
"[alt][control]-]": character-search-backward
"[control]-l": clear-screen
"[control]-i": complete
"[alt]!": complete-command
"[alt]/": complete-filename
"[alt]@": complete-hostname
"[alt]{": complete-into-braces
"[alt]~": complete-username
"[alt]$": complete-variable
"[control]-d": delete-char
"[control]-x[control]-v": display-shell-version
"[alt]l": downcase-word
"[alt][control]-i": dynamic-complete-history
"[control]-x[control]-e": edit-and-execute-command
"[alt]>": end-of-history
"[control]-e": end-of-line
"[control]-x[control]-x": exchange-point-and-mark
"[control]-f": forward-char
"[control]-s": forward-search-history
"[alt]f": forward-word
"[alt]g": glob-complete-word
"[alt]^": history-expand-line
"[alt]#": insert-comment
"[alt]*": insert-completions
"[alt].": insert-last-argument
"[alt]_": insert-last-argument
"[control]-k": kill-line
"[alt]d": kill-word
"[control]-n": next-history
"[alt]n": non-incremental-forward-search-history
"[alt]p": non-incremental-reverse-search-history
"[control]-o": operate-and-get-next
"[alt]=": possible-completions
"[alt]?": possible-completions
"[control]-p": previous-history
"[control]-q": quoted-insert
"[control]-v": quoted-insert
"[control]-x[control]-r": re-read-init-file
"[control]-r": reverse-search-history
"[alt][control]-r": revert-line
"[alt]r": revert-line
"[control]-@": set-mark
"[alt] ": set-mark
"[alt][control]-e": shell-expand-line
"[alt]&": tilde-expand
"[control]-t": transpose-chars
"[alt]t": transpose-words
"[control]-x[control]-u": undo
"[control]-_": undo
"[control]-u": unix-line-discard
"[control]-w": unix-word-rubout
"[alt]u": upcase-word
"[control]-y": yank
"[alt].": yank-last-arg
"[alt]_": yank-last-arg
"[alt][control]-y": yank-nth-arg
"[alt]y": yank-pop

Remand 36 まだ解読できませんでした。

bind -p 2>/dev/null \
| grep -vP "digit-argument|do-lowercase-version|not bound|self-insert" \
| perl -pe 's/\\e/[alt]/g;s/\\C/[control]/g' \
| grep -vP "[\-\]].\""

"[alt]OD": backward-char
"[alt][D": backward-char
"[alt][alt][D": backward-word
"[alt][1;5D": backward-word
"[alt][5D": backward-word
"[alt]OH": beginning-of-line
"[alt][1~": beginning-of-line
"[alt][H": beginning-of-line
"[alt][200~": bracketed-paste-begin
"[control]-xe": call-last-kbd-macro
"[alt][alt]": complete
"[alt][3~": delete-char
"[alt]\\": delete-horizontal-space
"[control]-x)": end-kbd-macro
"[alt]OF": end-of-line
"[alt][4~": end-of-line
"[alt][F": end-of-line
"[alt]OC": forward-char
"[alt][C": forward-char
"[alt][alt][C": forward-word
"[alt][1;5C": forward-word
"[alt][5C": forward-word
"[control]-x*": glob-expand-word
"[control]-xg": glob-list-expansions
"[alt]OB": next-history
"[alt][B": next-history
"[control]-x!": possible-command-completions
"[control]-x/": possible-filename-completions
"[control]-x@": possible-hostname-completions
"[control]-x~": possible-username-completions
"[control]-x$": possible-variable-completions
"[alt]OA": previous-history
"[alt][A": previous-history
"[alt][2~": quoted-insert
"[control]-x(": start-kbd-macro

たとえば、私はこれら3つのうちの1つが次のようになるはずですalt

bind -p | grep forward-word | grep \\[
"\e\e[C": forward-word
"\e[1;5C": forward-word
"\e[5C": forward-word

しかし、どれだったのか、残りは何なのかわかりません。一般的に一致する36のリストはありますか?

[編集1] @undercatさんの情報提供のおかげで、未知^Vの数を7に減らすことができました。

bind -p 2>/dev/null \
| grep -vP "digit-argument|do-lowercase-version|not bound|self-insert" \
| perl -pe 's/\\e\[A/[up]/g' \
| perl -pe 's/\\e\[B/[down]/g' \
| perl -pe 's/\\e\[C/[right]/g' \
| perl -pe 's/\\e\[D/[left]/g' \
| perl -pe 's/\\e\[1;5A/[control]-[up]/g' \
| perl -pe 's/\\e\[1;5B/[control]-[down]/g' \
| perl -pe 's/\\e\[1;5C/[control]-[right]/g' \
| perl -pe 's/\\e\[1;5D/[control]-[left]/g' \
| perl -pe 's/\\e\[2~/[control]-[insert]/g' \
| perl -pe 's/\\e\[3~/[control]-[delete]/g' \
| perl -pe 's/\\e/[alt]/g;s/\\C/[control]/g' \
| grep -P "\[[^\]]*\"" \
| perl -pe 's/\[alt\]/\\e/g;s/\[control\]/\\C/g'

"\e[5D": backward-word
"\e[1~": beginning-of-line
"\e[H": beginning-of-line
"\e[200~": bracketed-paste-begin
"\e[4~": end-of-line
"\e[F": end-of-line
"\e[5C": forward-word

[EDIT2]noshさんとprintfヒントについて@JdeBPに感謝します。しかし、decode-ecma48(nosh-terminal-management_1.39_amd64の)出力も解釈するのが難しいです。

... \
| perl -pe 's/:.*//g;s/"//g;s/^/\\/g' \
| xargs -I {} printf '{}' \
| ./console-decode-ecma48

CUB 5
DEC FIND
CUP 0
DEC FNK 200;1
DEC SELECT
CPL 1
CUF 5

JdeBPまたは他の人は、これらの古い略語を完全な現代の略語に翻訳することができます(実施例1実施例2と古代はい)キー(最新のキーボードにマッピングされている場合)?

ベストアンサー1

キーシーケンスに関する多くの情報は、マニュアルページから入手できますconsole_codes。たとえば、次のように\e[1;5Cなります。

ECMA-48 CSIシーケンス

CSI(またはESC [)の後には、セミコロンで区切られた10進数の最大NPAR(16)までの一連のパラメータが続きます。 (...) CSI シーケンスの動作は最終文字によって決まります。

これは、最初の数字がパラメータであり演算であることを1示しCます。もっと詳しく見ると、仕事をうまく見つけることができます。

C CUF 指定した列数だけ右にカーソルを移動します。

これは、シーケンスがカーソルを1つのシンボルの右側に移動するキーを記述することを意味します。それがまさに鍵です!

ここで文書化されていない(?)プレフィックスは5制御キーを表します。それはで言及されましたエル、推測する方が簡単だと思いますが(しかし確かに簡単ではありません!)

これらのエスケープコードを人間が読める形式に変換する簡単な方法はわかりませんが、反対方向への変換は簡単です。C-vBashを押すと、キーの組み合わせと対応する制御シーケンスが画面に表示されます。記号の形で、たとえばCtrl+がv生成さCtrlれます^[[1;5C

おすすめ記事