Zsh
怎麼用!!在 zsh 別名中
我正在嘗試創建一個基於我之前的命令的別名。
說我跑
ag foo
查看列表後,我希望能夠在 vim 中使用這些結果,所以我這樣做了
vim -q<(!! --vimgrep)
我想要的別名是
alias edit-last='vim -q<(!! --vimgrep)'
但我似乎無法
!!
在我的別名中使用。我很難找到關於它是什麼!!
、內置的、別名的資訊
!!
是歷史擴展。第一個!
開始歷史擴展;!!
具有事件指示符,表示上一個命令。您可以通過內置命令和
fc
變數訪問命令歷史記錄。history
history
由於
--vimgrep
僅對 有意義,因此如果將其應用於最後一個命令ag
,您的別名會更有用。ag
您可以ag
像這樣找到上一個命令:${${(M)history:#ag *}[1]}
此外,您需要將 注入
--vimgrep
命令中。alias edit-last='vim -q<(eval "${${(M)history:#ag *}[1]} --vimgrep")'
如果您更改了目前目錄,最後一個
ag
命令將不再有意義。這很難檢測。您可能希望將可接受的命令列入白名單。這當然不是一個完美的測試。edit-last () { local cmd setopt local_options extended_glob for cmd in $history; do case $cmd in ((ls|(cvs|git|hg|svn) status)(| *)) :;; ("ag "*) vim -q<(eval "$cmd --vimgrep"); return;; (edit-last) :;; (*) echo >&2 "The previous ag command is too old."; return 125;; esac done }