bashのEscはショートカットが割当られているから連打でキャンセルにならないというお話 ひとりぷちアドベントカレンダー2017 12日目
bash
のEsc
はキャンセルとはかぎらないよ、というお話です。
危ない事は無いと思うけれど、Esc
癖のある方は気をつけましょう。
Escはメタキーの代わり
bash
では、Esc
次の入力をメタキー
と押した事にする、というものになっています。
Esc
を押してから>
を押すと、メタキー
を押しながら>
押した場合と同じ扱いです。
そのため、適当にEsc
を押してからキーを入力すると何らかのショートカットが発動する場合があるのです。
Readline の記法
このセクションでは、emacs 形式の記法を使ってキーストロークを表します。 コントロールキーは C-key で表します (例: C-n は Control-N の意味です)。同様に メタ キーは M-key で表すので、M-x は Meta-X を表すことになります。 (メタ キーがないキーボードでは、M-x は ESC x を表します。つまり、 エスケープキーを押した後に x キーを押します。これは ESC を メタプレフィックス (meta prefix) にする操作です。 M-C-x の組み合わせは、ESC-Control-x つまり、エスケープキーを押した後に、コントロールキーを押したまま x を押すことを意味します。)
メタキー周りのショートカット
手元で次のようなショートカットが割当られていました。\e
はEsc
です。
bind -p | grep '\\e' "\e\C-g": abort "\eOD": backward-char "\e[D": backward-char "\e\C-h": backward-kill-word "\e\C-?": backward-kill-word "\eb": backward-word "\e<": beginning-of-history "\eOH": beginning-of-line "\e[H": beginning-of-line "\ec": capitalize-word "\e\C-]": character-search-backward "\e\e": complete "\e!": complete-command "\e/": complete-filename "\e@": complete-hostname "\e{": complete-into-braces "\e~": complete-username "\e$": complete-variable "\e[3~": delete-char "\e\\": delete-horizontal-space "\e-": digit-argument "\e0": digit-argument "\e1": digit-argument "\e2": digit-argument "\e3": digit-argument "\e4": digit-argument "\e5": digit-argument "\e6": digit-argument "\e7": digit-argument "\e8": digit-argument "\e9": digit-argument "\eA": do-lowercase-version "\eB": do-lowercase-version "\eC": do-lowercase-version "\eD": do-lowercase-version "\eE": do-lowercase-version "\eF": do-lowercase-version "\eG": do-lowercase-version "\eH": do-lowercase-version "\eI": do-lowercase-version "\eJ": do-lowercase-version "\eK": do-lowercase-version "\eL": do-lowercase-version "\eM": do-lowercase-version "\eN": do-lowercase-version "\eP": do-lowercase-version "\eQ": do-lowercase-version "\eR": do-lowercase-version "\eS": do-lowercase-version "\eT": do-lowercase-version "\eU": do-lowercase-version "\eV": do-lowercase-version "\eW": do-lowercase-version "\eX": do-lowercase-version "\eY": do-lowercase-version "\eZ": do-lowercase-version "\el": downcase-word "\e\C-i": dynamic-complete-history "\e>": end-of-history "\eOF": end-of-line "\e[F": end-of-line "\eOC": forward-char "\e[C": forward-char "\ef": forward-word "\eg": glob-complete-word "\e^": history-expand-line "\e#": insert-comment "\e*": insert-completions "\e.": insert-last-argument "\e_": insert-last-argument "\ed": kill-word "\eOB": next-history "\e[B": next-history "\en": non-incremental-forward-search-history "\ep": non-incremental-reverse-search-history "\e=": possible-completions "\e?": possible-completions "\eOA": previous-history "\e[A": previous-history "\e\C-r": revert-line "\er": revert-line "\e ": set-mark "\e\C-e": shell-expand-line "\e&": tilde-expand "\et": transpose-words "\eu": upcase-word "\e.": yank-last-arg "\e_": yank-last-arg "\e\C-y": yank-nth-arg "\ey": yank-pop
終わりに
Esc
がキャンセル系でない、というのは若干なれない感じはあります。
けれどもコマンドラインのような、ほとんどのキーが入力用に使われる場面では、同時押し以外でショートカットが割り当てられる、というのは案外便利な物です。