これまで複数回にわたりbashのショートカットキーを紹介してきたが、今回で最後だ。bashに限らず、シェルでは”キー自体”を登録(入力)する必要があることがある。それは、ショートカットキーの設定をするときだったり、キーに割り当てられた何らかの設定を変更するときだったり、エディタを使っているときだったりとケースはさまざまだが、ショートカットキーとしてではなく、入力されたデータとして処理する必要がある場合だ。今回はそうした際に利用するショートカットキーを取り上げる。
キーをそのまま入力するショートカットキー
今回紹介するのは次のショートカットキーだ。
キー | 操作 |
---|---|
「Ctrl」+「v」 | 文字をそのまま入力する |
「Ctrl」+「q」 | 文字をそのまま入力する |
「Insert」 | 文字をそのまま入力する |
「Insert」キーはMacには存在しないので、MacからLinuxにログインしている場合には役に立たない。「Insert」は除外して覚えることにすると、次のショートカットキーということになる。
キー | 操作 |
---|---|
「Ctrl」+「v」 | 文字をそのまま入力する |
「Ctrl」+「q」 | 文字をそのまま入力する |
例えば、「Ctrl」+「d」と入力するとbashが終了する。しかし、これをショートカットキーとしてではなく、「Ctrl」+「d」という文字そのものとして入力したいとしよう。その場合、「Ctrl」+「v」、「Ctrl」+「d」、ないしは「Ctrl」+「q」「Ctrl」+「d」と入力すればよいわけだ。これが必要になるケースはそれほど多くないものの、いざというときに知らないと手も足も出ない事態に陥る。そういう意味では、やはり知っておかなければならないショートカットキーだと言えるだろう。
「Ctrl」+「v」の問題点
これで終わればよいのだが、文字をそのまま入力するためのショートカットキーには何かと問題がある。Windowsユーザーならばご存じの通り、「Ctrl」+「v」は「貼り付け」に割り当てられているキーだ。当然、ターミナルアプリケーションでも「Ctrl」+「v」は貼り付けとして使いたいし、そのように設定することが多いだろう。しかし、「Ctrl」+「v」が貼り付けに設定されていると、bashのショートカットキーとしては使えないのである。
どちらを取るかはユーザーの都合次第だが、bashの操作を優先するのであれば、ターミナルアプリケーション側の設定を変更して「Ctrl」+「v」を使わないようにすればよい。Windows Terminalであれば、次のように「Ctrl」+「v」が「貼り付け」に設定されるだろう。
この設定を次のように削除する。
これで、bashで「Ctrl」+「v」が機能するようになる。例えば、bashで「Ctrl」+「v」と入力する。
これで、次に入力する文字はただの文字として処理されるようになる。試しにもう一度「Ctrl」+「v」と入力してみよう。
すると、次のように「Ctrl」+「v」という入力そのものが表示される。
機能としてはたったこれだけなのだが、知らないとどうにもできなくて困るときがある。このショートカットキーは覚えておこう。
「Ctrl」+「q」の問題点
覚えるショートカットキーは「Ctrl」+「v」ではなく「Ctrl」+「q」でもよい。しかし、「Ctrl」+「q」もやっかいだ。「stty -a」と実行してターミナルに割り当てられているショートカットキーを表示させてみよう。
上記からわかるように、「Ctrl」+「q」は「start」という処理に割り当てられている。このままでは、bashに「Ctrl」+「q」が届くことはなく、ターミナルの制御コードとして処理されてしまう。
詳しい説明は省くが、歴史的にターミナルでは「Ctrl」+「s」に「出力の停止」、「Ctrl」+「q」に「出力の再開」、という処理が割り当てられている。この処理はターミナルというものが本当に物理的なターミナルと等しい役割を担っていた時代に活用された機能なのだが、現在では特に必要がない。この機能は無効化し、bashの機能を有効にしたほうがよいだろう。
bashから次のコマンドを実行すると、「start」と「stop」に割り当てられた処理を無効化することができる。「stop」も現在では使うことがないので、「start」とセットで無効化しておこう。ずっとこの状態にしたいなら、以下のように~/.bashrcにこのコマンドを書き込んでおけばよい。
stty start undef
stty stop undef
動作は「Ctrl」+「v」のときと同じだ。まず、bashで「Ctrl」+「q」と入力する。
続けて、例えば「Ctrl」+「v」と入力する。
すると、次のように「Ctrl」+「v」が文字そのものとして表示される。
「Ctrl」+「v」と「Ctrl」+「q」は知らないと必要なときにとても困る。ぜひこの機会に押さえておいていただきたい。
付録 お薦めbashショートカットキー
キー | 操作 |
---|---|
「Enter」 | コマンドラインの内容を実行し、コマンドラインをクリア |
「Ctrl」+「o」 | コマンドラインの内容を実行し、コマンドラインはキープ |
「ESC」「#」 | コマンドラインの内容をコメントに変更し、コマンドラインを実行し、コマンドラインをクリア |
上記操作に必要な設定(~/.bashrc)
stty discard undef # dismiss Ctrl-o for readline's operate-and-get-next
キー | 操作 |
---|---|
「→」 | カーソルを1文字右へ移動 |
「←」 | カーソルを1文字左へ移動 |
「Home」 | カーソルを行頭へ移動 |
「End」 | カーソルを行末へ移動 |
「Ctrl」+「→」 | カーソルを単語の末尾へ移動、すでに単語の末尾の場合は、次の単語の末尾へ移動 |
「Ctrl」+「←」 | カーソルを単語の先頭へ移動、すでに単語の先頭の場合は、前の単語の先頭へ移動 |
キー | 機能 |
---|---|
「Backspace」 | カーソルの1つ左の文字を削除 |
「Delete」 | カーソルのある場所の文字を削除 |
「Ctrl」+「Backspace」 | カーソルの1つ左の文字から単語頭までを削除 |
「Ctrl」+「Delete」 | カーソルから単語末までを削除 |
「Ctrl」+「Home」 | カーソルの1つ左の文字から行頭までを削除 |
「Ctrl」+「End」 | カーソルから行末までを削除 |
上記操作に操作に必要な設定(~/.inputrc)
"\C-h": backward-kill-word # Ctrl-Backspace
"\e[1;5H": unix-line-discard # Ctrl-Home
"\e[1;5F": kill-line # Ctrl-End
キー | 機能 |
---|---|
「Backspace」 | カーソルの1つ左の文字を削除 |
「Delete」 | カーソルのある場所の文字を削除 |
「ESC」「Backspace」 | カーソルの1つ左の文字から単語頭までを削除 |
「ESC」「Delete」 | カーソルから単語末までを削除 |
「Ctrl」+「u」 | カーソルの1つ左の文字から行頭までを削除 |
「Ctrl」+「k」 | カーソルから行末までを削除 |
上記操作に操作に必要な設定(~/.inputrc)
"\e\e[3~": kill-word # ESC Delete
キー | 操作 |
---|---|
「↑」 | コマンド履歴から1つ前のコマンドを表示(古いほうへ) |
「↓」 | コマンド履歴から1つ後のコマンドを表示(新しいほうへ) |
「Ctrl」+「r」 | インクリメンタルコマンド履歴検索(古いほうへ) |
「Ctrl」+「s」 | インクリメンタルコマンド履歴検索(新しいほうへ) |
キー | 操作 |
---|---|
「Tab」 | 補完 |
キー | 操作 |
---|---|
「Ctrl」+「x」「(」 | キーボードマクロの記録を開始 |
「Ctrl」+「x」「)」 | キーボードマクロの記録を終了 |
「Ctrl」+「x」「e」 | キーボードマクロを実行 |
キー | 操作 |
---|---|
「Ctrl」+「_」 | アンドゥ |
「Ctrl」+「l」 | スクリーンクリア |
キー | 操作 |
---|---|
「Ctrl」+「v」 | 文字をそのまま入力する |
「Ctrl」+「q」 | 文字をそのまま入力する |
上記操作に必要な設定(~/.bashrc)
stty start undef # dismiss Ctrl-q for readline's quoted-insert
stty stop undef # dismiss according to start
付録 Windows Terminal キーとキー表記
キー | キー表記 |
---|---|
「ESC」 | \e |
「ESC」「ESC」 | \e\e |
「Home」 | \e[H |
「Insert」 | \e[2~ |
「Delete」 | \e[3~ |
「End」 | \e[F |
「Page Up」 | \e[5~ |
「Page Down」 | \e[6~ |
「F1」 | \eOP |
「F2」 | \eOQ |
「F3」 | \eOR |
「F4」 | \eOS |
「F5」 | \eO15~ |
「F6」 | \eO17~ |
「F7」 | \eO18~ |
「F8」 | \eO19~ |
「F9」 | \eO20~ |
「F10」 | \eO21~ |
「Alt」+「Home」 | \e[1;3H |
「Alt」+「Insert」 | \e[2;3~ |
「Alt」+「Delete」 | \e[3;3~ |
「Alt」+「End」 | \e[1;3F |
「Alt」+「Page Up」 | \e[5;3~ |
「Alt」+「Page Down」 | \e[6;3~ |
「Ctrl」+「Home」 | \e[1;5H |
「Ctrl」+「Insert」 | \e[2;5~ |
「Ctrl」+「Delete」 | \e[3;5~ |
「Ctrl」+「End」 | \e[1;5F |
「Ctrl」+「Page Up」 | \e[5;5~ |
「Ctrl」+「Page Down」 | \e[6;5~ |
「↑」 | \e[A |
「↓」 | \e[B |
「→」 | \e[C |
「←」 | \e[D |
「Alt」+「↑」 | \e[1;3A |
「Alt」+「↓」 | \e[1;3B |
「Alt」+「→」 | \e[1;3C |
「Alt」+「←」 | \e[1;3D |
「Ctrl」+「↑」 | \e[1;5A |
「Ctrl」+「↓」 | \e[1;5B |
「Ctrl」+「→」 | \e[1;5C |
「Ctrl」+「←」 | \e[1;5D |
貼り付け開始 | \e[200~ |
クエリステータスレポート | \e[5n |
クエリステータスレポート(応答) | \e[0n |
「Backspace」 | \C-? |
「Ctrl」+「Backspace」 | \C-H |
「Tab」 | \C-I |
「Enter」 | \C-M |
付録 Mac Terminal キーとキー表記
キー | キー表記 |
---|---|
「ESC」 | \e |
「ESC」「ESC」 | \e\e |
「Home」 | なし |
「Insert」 | なし |
「Delete」 | \e[3~ |
「End」 | なし |
「Page Up」 | なし |
「Page Down」 | なし |
「F1」 | \eOP |
「F2」 | \eOQ |
「F3」 | \eOR |
「F4」 | \eOS |
「F5」 | \eO15~ |
「F6」 | \eO17~ |
「F7」 | \eO18~ |
「F8」 | \eO19~ |
「F9」 | \eO20~ |
「F10」 | なし |
「F11」 | \eO23~ |
「F12」 | \eO24~ |
「Alt」+「Home」 | なし |
「Alt」+「Insert」 | なし |
「Alt」+「Delete」 | なし |
「Alt」+「End」 | なし |
「Alt」+「Page Up」 | なし |
「Alt」+「Page Down」 | なし |
「Ctrl」+「Home」 | なし |
「Ctrl」+「Insert」 | なし |
「Ctrl」+「Delete」 | \e[3;5~ |
「Ctrl」+「End」 | なし |
「Ctrl」+「Page Up」 | なし |
「Ctrl」+「Page Down」 | なし |
「↑」 | \e[A |
「↓」 | \e[B |
「→」 | \e[C |
「←」 | \e[D |
「Alt」+「↑」 | なし |
「Alt」+「↓」 | なし |
「Alt」+「→」 | なし |
「Alt」+「←」 | なし |
「Ctrl」+「↑」 | \e[A |
「Ctrl」+「↓」 | \e[B |
「Ctrl」+「→」 | \e[1;5C |
「Ctrl」+「←」 | \e[1;5D |
貼り付け開始 | \e[200~ |
クエリステータスレポート | \e[5n |
クエリステータスレポート(応答) | \e[0n |
「Backspace」 | \C-H |
「Ctrl」+「Backspace」 | \C-H |
「Tab」 | \C-I |
「Enter」 | \C-M |
付録 bash bind -p 出力キー対応表
キー表記 | キー | readline関数(Ubuntu 20.04デフォルト割当) |
---|---|---|
\e | 「ESC」 | set-mark |
\C-g | 「Ctrl」+「g」 | abort |
\C-x\C-g | 「Ctrl」+「x」「Ctrl」+「g」 | abort |
\e\C-g | 「ESC」「Ctrl」+「g」 | abort |
\C-j | 「Enter」 | accept-line |
\C-m | 「Enter」 | accept-line |
\C-b | 「Ctrl」+「b」 | backward-char |
\eOD | 「←」 | backward-char |
\e[D | 「←」 | backward-char |
\C-? | 「Backspace」 | backward-delete-char |
\C-h | 「Ctrl」+「Backspace」 | backward-delete-char |
\C-x\C-? | 「Ctrl」+「x」「Ctrl」+「Backspace」 | backward-kill-line |
\e\C-? | 「ESC」「Ctrl」+「Backspace」 | backward-kill-word |
\e\C-h | 「ESC」「Backspace」 | backward-kill-word |
\e[1;3D | 「Alt」+「←」 | backward-word |
\e[1;5D | 「Ctrl」+「←」 | backward-word |
\e[5D | 「Ctrl」+「←」 | backward-word |
\e\e[D | 「ESC」「←」 | backward-word |
\eb | 「ESC」「b」 | backward-word |
\e< | 「ESC」「<」 | beginning-of-history |
\C-a | 「Ctrl」+「a」 | beginning-of-line |
\eOH | 「Home」 | beginning-of-line |
\e[1~ | 「Home」 | beginning-of-line |
\e[H | 「Home」 | beginning-of-line |
\e[200~ | 貼り付け開始 | bracketed-paste-begin |
\C-xe | 「Ctrl」+「x」「e」 | call-last-kbd-macro |
\C-] | 「Ctrl」+「]」 | character-search |
\e\C-] | 「ESC」「Ctrl」+「]」 | character-search-backward |
\C-l | 「Ctrl」+「l」 | clear-screen |
\C-i | 「Tab」 | complete |
\e\e | 「ESC」「ESC」 | complete |
\e! | 「ESC」「!」 | complete-command |
\e/ | 「ESC」「/」 | complete-filename |
\e@ | 「ESC」「@」 | complete-hostname |
\e{ | 「ESC」「{」 | complete-into-braces |
\e~ | 「ESC」「~」 | complete-username |
\e$ | 「ESC」「$」 | complete-variable |
\C-d | 「Ctrl」+「d」 | delete-char |
\e[3~ | 「Delete」 | delete-char |
\e\ | 「ESC」「\」 | delete-horizontal-space |
\e- | 「ESC」「-」 | digit-argument |
\e0 | 「ESC」「0」 | digit-argument |
\e1 | 「ESC」「1」 | digit-argument |
\e2 | 「ESC」「2」 | digit-argument |
\e3 | 「ESC」「3」 | digit-argument |
\e4 | 「ESC」「4」 | digit-argument |
\e5 | 「ESC」「5」 | digit-argument |
\e6 | 「ESC」「6」 | digit-argument |
\e7 | 「ESC」「7」 | digit-argument |
\e8 | 「ESC」「8」 | digit-argument |
\e9 | 「ESC」「9」 | digit-argument |
\C-x\C-v | 「Ctrl」+「x」「Ctrl」+「v」 | display-shell-version |
\C-xA | 「Ctrl」+「x」「A」 | do-lowercase-version |
\C-xB | 「Ctrl」+「x」「B」 | do-lowercase-version |
\C-xC | 「Ctrl」+「x」「C」 | do-lowercase-version |
\C-xD | 「Ctrl」+「x」「D」 | do-lowercase-version |
\C-xE | 「Ctrl」+「x」「E」 | do-lowercase-version |
\C-xF | 「Ctrl」+「x」「F」 | do-lowercase-version |
\C-xG | 「Ctrl」+「x」「G」 | do-lowercase-version |
\C-xH | 「Ctrl」+「x」「H」 | do-lowercase-version |
\C-xI | 「Ctrl」+「x」「I」 | do-lowercase-version |
\C-xJ | 「Ctrl」+「x」「J」 | do-lowercase-version |
\C-xK | 「Ctrl」+「x」「K」 | do-lowercase-version |
\C-xL | 「Ctrl」+「x」「L」 | do-lowercase-version |
\C-xM | 「Ctrl」+「x」「M」 | do-lowercase-version |
\C-xN | 「Ctrl」+「x」「N」 | do-lowercase-version |
\C-xO | 「Ctrl」+「x」「O」 | do-lowercase-version |
\C-xP | 「Ctrl」+「x」「P」 | do-lowercase-version |
\C-xQ | 「Ctrl」+「x」「Q」 | do-lowercase-version |
\C-xR | 「Ctrl」+「x」「R」 | do-lowercase-version |
\C-xS | 「Ctrl」+「x」「S」 | do-lowercase-version |
\C-xT | 「Ctrl」+「x」「T」 | do-lowercase-version |
\C-xU | 「Ctrl」+「x」「U」 | do-lowercase-version |
\C-xV | 「Ctrl」+「x」「V」 | do-lowercase-version |
\C-xW | 「Ctrl」+「x」「W」 | do-lowercase-version |
\C-xX | 「Ctrl」+「x」「X」 | do-lowercase-version |
\C-xY | 「Ctrl」+「x」「Y」 | do-lowercase-version |
\C-xZ | 「Ctrl」+「x」「Z」 | do-lowercase-version |
\eA | 「ESC」「A」 | do-lowercase-version |
\eB | 「ESC」「B」 | do-lowercase-version |
\eC | 「ESC」「C」 | do-lowercase-version |
\eD | 「ESC」「D」 | do-lowercase-version |
\eE | 「ESC」「E」 | do-lowercase-version |
\eF | 「ESC」「F」 | do-lowercase-version |
\eG | 「ESC」「G」 | do-lowercase-version |
\eH | 「ESC」「H」 | do-lowercase-version |
\eI | 「ESC」「I」 | do-lowercase-version |
\eJ | 「ESC」「J」 | do-lowercase-version |
\eK | 「ESC」「K」 | do-lowercase-version |
\eL | 「ESC」「L」 | do-lowercase-version |
\eM | 「ESC」「M」 | do-lowercase-version |
\eN | 「ESC」「N」 | do-lowercase-version |
\eO | 「ESC」「O」 | do-lowercase-version |
\eP | 「ESC」「P」 | do-lowercase-version |
\eQ | 「ESC」「Q」 | do-lowercase-version |
\eR | 「ESC」「R」 | do-lowercase-version |
\eS | 「ESC」「S」 | do-lowercase-version |
\eT | 「ESC」「T」 | do-lowercase-version |
\eU | 「ESC」「U」 | do-lowercase-version |
\eV | 「ESC」「V」 | do-lowercase-version |
\eW | 「ESC」「W」 | do-lowercase-version |
\eX | 「ESC」「X」 | do-lowercase-version |
\eY | 「ESC」「Y」 | do-lowercase-version |
\eZ | 「ESC」「Z」 | do-lowercase-version |
\el | 「ESC」「l」 | downcase-word |
\e\C-i | 「ESC」「Tab」 | dynamic-complete-history |
\C-x\C-e | 「Ctrl」+「x」「Ctrl」+「e」 | edit-and-execute-command |
\C-x) | 「Ctrl」+「x」「)」 | end-kbd-macro |
\e> | 「ESC」「>」 | end-of-history |
\C-e | 「Ctrl」+「e」 | end-of-line |
\eOF | 「End」 | end-of-line |
\e[4~ | 「End」 | end-of-line |
\e[F | 「End」 | end-of-line |
\C-x\C-x | 「Ctrl」+「x」「Ctrl」+「x」 | exchange-point-and-mark |
\C-f | 「Ctrl」+「f」 | forward-char |
\eOC | 「→」 | forward-char |
\e[C | 「→」 | forward-char |
\C-s | 「Ctrl」+「s」 | forward-search-history |
\e[1;3C | 「Alt」+「→」 | forward-word |
\e[1;5C | 「Ctrl」+「→」 | forward-word |
\e[5C | 「Ctrl」+「→」 | forward-word |
\e\e[C | 「ESC」「→」 | forward-word |
\ef | 「ESC」「f」 | forward-word |
\eg | 「ESC」「g」 | glob-complete-word |
\C-x* | 「Ctrl」+「x」「*」 | glob-expand-word |
\C-xg | 「Ctrl」+「x」「g」 | glob-list-expansions |
\e^ | 「ESC」「^」 | history-expand-line |
\e# | 「ESC」「#」 | insert-comment |
\e* | 「ESC」「*」 | insert-completions |
\e. | 「ESC」「.」 | insert-last-argument |
\e_ | 「ESC」「_」 | insert-last-argument |
\C-k | 「Ctrl」+「k」 | kill-line |
\e[3;5~ | 「Ctrl」+「Delete」 | kill-word |
\ed | 「ESC」「d」 | kill-word |
\C-n | 「Ctrl」+「n」 | next-history |
\eOB | 「↓」 | next-history |
\e[B | 「↓」 | next-history |
\en | 「ESC」「n」 | non-incremental-forward-search-history |
\ep | 「ESC」「p」 | non-incremental-reverse-search-history |
\C-o | 「Ctrl」+「o」 | operate-and-get-next |
\C-x! | 「Ctrl」+「x」「!」 | possible-command-completions |
\e= | 「ESC」「=」 | possible-completions |
\e? | 「ESC」「?」 | possible-completions |
\C-x/ | 「Ctrl」+「x」「/」 | possible-filename-completions |
\C-x@ | 「Ctrl」+「x」「@」 | possible-hostname-completions |
\C-x~ | 「Ctrl」+「x」「~」 | possible-username-completions |
\C-x$ | 「Ctrl」+「x」「$」 | possible-variable-completions |
\C-p | 「Ctrl」+「p」 | previous-history |
\eOA | 「↑」 | previous-history |
\e[A | 「↑」 | previous-history |
\C-q | 「Ctrl」+「q」 | quoted-insert |
\C-v | 「Ctrl」+「v」 | quoted-insert |
\e[2~ | 「Insert」 | quoted-insert |
\C-x\C-r | 「Ctrl」+「x」「Ctrl」+「r」 | re-read-init-file |
\e[0n | クエリステータスレポート(応答) | redraw-current-line |
\er | 「ESC」「r」 | redraw-current-line |
\C-r | 「Ctrl」+「r」 | reverse-search-history |
\e\C-r | 「ESC」「Ctrl」+「r」 | revert-line |
\C-@ | 「Ctrl」+「@」 | set-mark |
\e\C-e | 「ESC」「Ctrl」+「e」 | shell-expand-line |
\C-x( | 「Ctrl」+「x」「(」 | start-kbd-macro |
\e& | 「ESC」「&」 | tilde-expand |
\et | 「ESC」「t」 | transpose-words |
\C-_ | 「Ctrl」+「_」 | undo |
\C-x\C-u | 「Ctrl」+「x」「Ctrl」+「u」 | undo |
\C-u | 「Ctrl」+「u」 | unix-line-discard |
\C-w | 「Ctrl」+「w」 | unix-word-rubout |
\eu | 「ESC」「u」 | upcase-word |
\C-z | 「Ctrl」+「z」 | vi-editing-mode |
\C-y | 「Ctrl」+「y」 | yank |
\e. | 「ESC」「.」 | yank-last-arg |
\e_ | 「ESC」「_」 | yank-last-arg |
\e\C-y | 「ESC」「Ctrl」+「y」 | yank-nth-arg |
\ey | 「ESC」「y」 | yank-pop |