(背景:私は長年のtcshユーザーであり、徐々にbashに移行し、いくつかの便利なtcsh固有の機能に相当するものを見つけようとしています。)
Tcshでは、外部コマンドを実行するキーバインディングを定義できます。たとえば、次のようになります。
bindkey -c ^Gu uptime
Tcshに「Control-Gu」と入力すると、uptime
コマンドが実行されます。 Enterキーを入力する必要はなく、コマンドは履歴に表示されず、入力行の途中で実行できます(後者は特定のコマンドで特に便利です)。
bashには、GNU readlineライブラリを介した同様のキーバインディングメカニズムがあり、バインディングは$HOME/.inputrc
(または他の場所)で指定されています。しかし、info readline
ドキュメントを読んだ後、私はしません。キーバインディングが外部コマンドを実行する方法を確認します。
私が理解した最も近いことは、次のようなものを私の.inputrc
ファイルに追加することです。
"\C-gu": "uptime\n"
しかし、それはコマンドを実行しません。むしろ、uptime
に続けてEnterキーを入力したかのように機能します。このコマンドは私の履歴に表示され(問題ありません)、空の行でのみ機能します。 "echo control-Gu"
と入力すると、コマンドを実行するのではなく、uptime
が出力されます。
もう1つの小さな欠点は、バインディングが、Perlデバッガーなど、GNU readlineを使用する他のコマンドに影響を与えることです。
キーシーケンスを指定された外部コマンドの実行にマッピングすることにより、bashでtcshのbindkey -c
の効果をシミュレートする方法はありますか?
重要な場合は、Ubuntu12.04ベータ2でbash4.2.24を使用しています。
すべてのbash
行編集が~/.inputrc
から制御されるわけではありません。その多くは、bind
ビルトインを介して構成されます。この場合、次のようなものが必要です
bind -x '"\C-gu":uptime'
~/.bashrc
で。