如何將歷史記錄中的整個命令插入 Bash 中的目前命令中?

如何將歷史記錄中的整個命令插入 Bash 中的目前命令中?

如何將歷史記錄中的整個命令插入 Bash 中的目前命令中?

我做了一些研究並確定了兩個 GNU Readline 鍵綁定,它們將插入上一個命令的第一個和最後一個單字。不幸的是,我不知道如何為這些鍵綁定提供參數n(如何?),即使我知道,從歷史記錄中插入長命令也是不可行的。

Ctrl-Alt-y

將第一個參數插入上一個命令。使用參數 n,插入上一個指令中的第 n 字。

Alt-.
Alt-_

將最後一個參數插入上一個指令。使用參數 n,插入上一個指令中的第 n 字。

GNU Readline 是否支援將歷史記錄中的整個命令插入到目前命令中?

免責聲明:我不是尋找 Bash 命令替換。

答案1

輸入所需的歷史擴展(例如!foo!39)並展開它

history-expand-line (M-^)
在目前行執行歷史擴展。

元將是Alt,IIRC。

答案2

您可以自己建立綁定。您只需決定將其綁定到哪個鍵即可。範例為Ctrl-T

insert_last_line(){
     local l=$READLINE_LINE p=READLINE_POINT h=$(fc -nl -0)
     READLINE_LINE=${l:0:p}${h#* }${l:p}
}
bind -x '"\C-T": insert_last_line'

讓它在重複時插入以前的條目是留給讀者的練習;-)

相關內容