例:F12コマンドにキーをバインドして、メッセージ「foobar」を押すecho "foobar"
たびF12に画面に出力されるようにします。理想的には、ビルトインだけでなく、任意のシェルコマンドにすることができます。これをどうやってやるの?
回答:
コマンドラインでCtrl- vを押してから、目的のキーを押すことで、キーによって出力された文字シーケンスを確認できます。私のシステムではF12、が表示されます^[[24~
。を^[
表しEscます。異なるタイプの端末または端末エミュレーターは、同じキーに対して異なるコードを発行できます。
Bashプロンプトで、次のようなコマンドを入力してキーマクロを有効にし、試してみることができます。
bind '"\e[24~":"foobar"'
これで、を押すF12と、コマンドラインに「foobar」が表示され、さらに編集することができます。キーストロークでコマンドをすぐに入力したい場合は、改行を追加できます。
bind '"\e[24~":"pwd\n"'
これで、を押すとF12、を押さなくても現在のディレクトリが表示されますEnter。行にすでに何かを入力していて、これを使用して自動的に実行されるとどうなりますか?乱雑になる可能性があります。ただし、マクロの一部として行をクリアできます。
bind '"\e[24~":"\C-k \C-upwd\n"'
スペースがあることを確認しますCtrl- u鳴ってから鐘を保つために削除するために何かを持っています。
マクロが希望どおりに機能するようになったら、~/.inputrc
ファイルに追加してマクロを永続化できます。bind
コマンドや一重引用符の外側のセットは必要ありません。
"\e[24~":"\C-k \C-upwd\n"
編集:
現在のコマンドラインに影響を与えずに何かを実行するキーバインディングを作成することもできます。
bind -x '"\eW":"who"'
そして、あなたは、たとえば、ユーザ名が必要なコマンドを入力している、とあなたが押すことができ、ログインしているユーザーの名前を知っている必要がありながらAlt- Shift- Wとの出力がwho
表示され、プロンプトが再発行されます部分的なコマンドはそのままで、カーソルは行の同じ位置にあります。
残念ながら、これはF123文字以上を出力するようなキーでは適切に機能しません。場合によっては、これを回避できます。
コマンド(who
この場合)は、プログラム、スクリプト、または関数など、任意の実行可能ファイルです。
bind '"\C-q": menu-complete'
例えば(またはのあなた~/.inputrc
:"\C-q": menu-complete
)。またstty -ixon
、~/.bashrc
フロー制御を無効にして、^ Sおよび^ Qを使用可能にする必要がある場合もあります。
^[
表すことを言ってesc
、それから\e
あなたの例ではそれを代用するようです。理由を教えてください。
^[
は出力表現です。\e
それを入力するための一つの方法である(^[
そのために動作しません)。
~/.inputrc
(GNU Readlineライブラリの構成ファイル)でbashキーバインディングを定義できます 。構文は
<keysymまたはキー名>:マクロ
例えば:
Control-o: "> output"
を押すと「出力」を挿入するマクロを作成します ControlO
"\e[11~": "echo foobar"
を押すと "echo foobar"を挿入するマクロが作成されますF1...のキーシムF11が手元にないのかわかりません。
編集:
.inputrc
\n
改行のエスケープシーケンスを理解するため、
"\e[11~": "echo foobar\n"
これは、コマンドが発行された後、効果的に「Enter」を押します。
Alt
使用することは、\e
例えば"\eo": "> output"
。
.inputrc
詳細なチュートリアルについては、hackaday.com / 2018/01/19 / linux
このソリューションはX11環境に固有であり、bashとは関係ありませんが、.Xmodmapsに以下を追加します
% loadkeys
keycode 88 = F12
string F12 = "foobar"
%
F12を押すと、文字列 "foobar"が端末に送信されます。
Ctrl+B
コマンドにバインドしたかった。上記の回答に触発されて使用しようとしましbind
たが、一連の不可解な波線(\e[24~
?)がに変換されましたCtrl+B
。
Macでは、ターミナルアプリの[設定]、[プロファイル]-> [キーボード]->の順に移動し、目的+
のキーボードショートカットを押すと、それが表示されます。私にとってCtrl+B
は、私が\002
コマンドに正常にバインドした結果
bind '"\002":"echo command"'
また、コマンドを(プロンプトに挿入するだけでなく)すぐに実行したい場合は、次のようにコマンドの最後にEnterを追加できます。
bind '"\002":"echo command\015"'