私はこれを行う方法を見つけることができません強く打つ。それでは、動的に生成された文字列をカーソル位置に挿入する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_POINT
readline変数とを編集する関数を書くことができます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
たとえば、開始することはできません)。