Zsh

移動到多行命令的上一行

  • April 15, 2021

使用轉義換行符編輯多行命令時,我無法向上移動行。

例如,假設我輸入echo \一行,然後按Enter,然後我想編輯echo \命令的一部分。按下Up不會返回到第一個命令行。

這適用於換行的長命令,但不適用於轉義換行符:

_physical_up_line()   { zle backward-char -n $COLUMNS }
_physical_down_line() { zle forward-char  -n $COLUMNS }
zle -N physical-up-line _physical_up_line
zle -N physical-down-line _physical_down_line
bindkey -M vicmd "R" physical-up-line
bindkey -M vicmd "N" physical-down-line

當您按下Enter( accept-linecommand) 時,目前行被解析並安排執行。如果該行在語法上不完整(例如echo \or for x in foo),它不會被執行,但它已經被儲存了。您可以看到 zsh 處於這種狀態,因為它顯示的是PS2提示而不是通常的PS1.

據我所知,沒有內置的方法來編輯這些儲存的行。應該可以通過儲存目前行而不執行它並呼叫上一個歷史行進行編輯來實現。

獲取上一行的最簡單方法是確保目前行未完成(例如\在末尾鍵入),接受它(按Enter),然後取消它(按Ctrl+ C)。然後,您可以通過按 將整個儲存的命令作為單個歷史記錄行作為單個多行緩衝區來呼叫Up

引用自:https://unix.stackexchange.com/questions/258787