bash readlineコマンドを定義する方法はありますか? [閉鎖]

bash readlineコマンドを定義する方法はありますか? [閉鎖]

私はこれを行う方法を見つけることができません強く打つ。それでは、動的に生成された文字列をカーソル位置に挿入するbash readlineショートカットを定義する方法はありますか?

たとえば、日付を挿入したいと思います。

bind '"\C-xx": my-dynamical-date'

aaa  bbb
--------
    ^ cursor is here

# After pressing "\C-xx":

aaa Sun Apr 22 22:19:00 CST 2018 bbb
------------------------------------
                                ^ cursor is here

それでは、my-dynamical-date readlineコマンドをどのように定義しますか?

答え1

少し愚かですが、次のように進むことができます。

bind '"\C-xx":"$(date) \e\C-e\ef\ef\ef\ef\ef"'

まず、文字を入力して$(date)呼び出してshell-expand-line から5単語前に移動します。

キーバインディングを保存するには、以下を追加しますinputrc

"\C-xx":"$(date) \e\C-e\ef\ef\ef\ef\ef"

答え2

READLINE_POINTreadline変数とを編集する関数を書くことができますREADLINE_LINE。たとえば、あなたの設定には以下が含まれます.bashrc

_myinsert() { # add date at point
    local TOADD=$(date)
    READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${TOADD}${READLINE_LINE:$READLINE_POINT}"
    READLINE_POINT=$(($READLINE_POINT + ${#TOADD}))
}
# cannot put this in ~/.inputrc
bind -x '"\C-xx":_myinsert'

これは-xバインディングオプションを使用して関数を呼び出します。私は同等のものを~/.inputrcファイルに入れる方法がわかりません。 (-xたとえば、開始することはできません)。

関連情報