Command-Line
如何在 Zsh 的命令行中展開所有變數?
在較早的一個特定於 bash 的問題中,我問我如何在命令行中擴展相對路徑,並使用製表符完成?
我喜歡@ Mikel ’s answer提到使用
Ctrl
++來擴展所有變數,並且我經常使用它。Alt``e
從那時起,我切換到
zsh
並且雖然我可以鍵入$PWD
並按下Tab
以展開目前目錄的路徑,但如果我鍵入類似的內容$PWD/.profile
並按下Tab
它不會被展開。我已經閱讀了類似的問題,並看到了有關擴展別名的答案以及如何通過鍵入它們並按下來擴展變數,
Tab
但與按下Ctrl
+Alt
+e
in沒有任何相同之處bash
。是否有某種方法可以允許轉義序列(例如
Ctrl
++Alt
)e
擴展正在鍵入的命令行中的所有變數zsh
?
您可以設置compinit以擴展您的參數
~/.zshrc
:zstyle ':completion:*' completer _expand _complete autoload -Uz compinit compinit
這是一個最小設置,如果您已經啟用了compinit
_expand
,添加到設置中應該就足夠了completer
還有一個
expand-word
預設綁定到^X*
(Ctrl
+x
*
) 的小元件,它與 bash 中的相同綁定基本相同。注意:這兩種方法都只適用於目前單詞。
作為替代方案,
zsh
您實際上可以執行您在原始問題中要求的操作:將相對路徑轉換為絕對路徑。以下是手冊頁中稍作修改的範例zshcontrib(1)
:# load necessary utility function autoload -Uz modify-current-argument # define helper function for actual work expand-and-abspath () { # expand the path (for example `~` -> `/home/youruser`) REPLY=${~1} # transform into absolute path (use `:A` if you want to resolve symlinks) REPLY=${REPLY:a} } # actual widget function abspath-word() { # use helper function on current word modify-current-argument expand-and-abspath } # create zle widget `abspath-word` (with function of the same name) zle -N abspath-word # bind widget to "Ctrl+x p" bindkey '^Xp' abspath-word
這定義了
abspath-word
小元件,它將目前單詞替換為絕對路徑表示並將其綁定到Ctrl
+x``p
。