如何在 zsh 上保存目前命令?

如何在 zsh 上保存目前命令?

我正在輸入一個命令,我記得我必須檢查一些內容,如果我按Ctrl+,U命令就會消失,我可以輸入其他內容,但是我輸入的命令不在歷史記錄中。

有沒有辦法恢復該命令,或者我可以按其他快捷方式將命令保存在某處?

答案1

看一下push-lineZLE 指令。該命令將該行的當前內容推送到緩衝區堆疊並清除該行。然後,您可以輸入另一個命令,當 ZLE 再次啟動時,該行將從緩衝區堆疊彈出到行緩衝區中。

prompt@world$ cp abc /mnt/usr/bin       # The user presses Esc-q
prompt@world$                           # The line is cleared
prompt@world$ mount -v /dev/sdb1 /mnt   # And the user can enter another command
mount: /dev/sdb1 mounted on /mnt
prompt@world$ cp abc /mnt/usr/bin
# The first command is popped off of the stack
#  as soon as ZLE comes back.

預設情況下,該命令在 emacs 模式下綁定到Alt/ 。Escq您可以使用該命令將此命令綁定到不同的鍵bindkey。例如,為了將其綁定到Alt/ Escv,請將其新增bindkey '^[V' push-line至您的zshrc.

答案2

Ctrl+Y將貼上您剪下的最後一個項目(使用Ctrl+ UCtrl+ KCtrl+W等)。

答案3

您正在尋找push-line命令,預設綁定到Ctrl+QEsc Q。該命令清除輸入並讓您輸入另一個命令;一旦執行或取消此命令,就會返回上一個命令進行編輯。

使用多行命令,push-line僅清除目前行,並將其他行保留在輸入緩衝區中。還有另一個命令push-input它會清除整個輸入緩衝區,預設不會綁定到任何鍵。

我使用這個指令的包裝器。我輸入Ctrl+Z以“暫停”我正在輸入的命令並輸入另一個命令。在我運行該命令(或使用Ctrl+中止它C)後,掛起的命令將返回進行編輯(甚至記住遊標位置)。作為額外的便利,如果當我鍵入Ctrl+時命令行為空Z,則該鍵會調用bg內建命令(因此雙Ctrl+Z會將正在運行的命令直接發送到後台)。

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

#在任何 shell 中都有效的低技術方法是在當前行的開頭添加 a並按Enter

相關內容