
答案1
您可以為此使用自訂 zle 小部件並透過鍵綁定呼叫它,例如Alt+ Tab(與Esc,相同Tab)
expand-to-output () {
BUFFER='$('$BUFFER')'
CURSOR=0
zle redisplay
zle expand-word
}
zle -N expand-to-output
bindkey "^[^I" expand-to-output
現在,如果您鍵入任何命令後跟Alt+ Tab,整個命令將被其輸出替換,如果該指令可以成功運行。如果命令無法成功運行,則鍵入的命令列將被包圍$(...)
但不會展開。如果有錯誤訊息,它們應該會列印在編輯緩衝區上方。這對於多行提示可能無法可靠地工作。
解釋:
expand-to-output () {...}
定義(新)expand-to-output
函數。BUFFER
包含目前命令列BUFFER='$('$BUFFER')'
位於命令列$(
之前和之後。相當於但可以嵌套。)
$(...)
`...`
CURSOR
是遊標在命令列上的位置CURSOR=0
將遊標放在(已編輯的)命令列的開頭,即$
。如果不將遊標移到那裡,可能會zsh
嘗試擴展 內部的單字$(...)
而不是整個過程替換。zle redisplay
重新顯示編輯緩衝區。這可以防止擴展命令列印某些內容時出現顯示錯誤標準錯誤。 (註:多行提示可能存在一些問題)zle expand-word
呼叫expand-word
小部件,該小部件通常作為製表符補全的一部分被呼叫。zle -N expand-to-output
將函數註冊為同名的小部件。bindkey "^[^I" expand-to-output
將小部件綁定expand-to-output
到Alt+ Tab。