Zsh

帶有 fzf 選擇的 zsh 功能需要 Enter

  • May 25, 2022

我寫了一個簡單的 zsh 函式,它允許我從dirs-stackvia中進行選擇fzf

我的.zshrc樣子

DIRSTACKSIZE='99'    
setopt PUSHD_IGNORE_DUPS

# change to directory from the dirs stack
fzf-change-dirstack () {
   cd "$(dirs -lv | cut -f2 | fzf )" 
}

zle -N fzf-change-dirstack
bindkey '^[p' fzf-change-dirstack   # shortcut ALT+P

即使必須進行一些改進,它也能正常工作。唯一對我來說非常煩人的是,當我使用鍵綁定時,我必須鍵入Enter兩次才能切換到目錄。

如何在cd不再次輸入兩次的情況下立即修改腳本Enter

fzf-change-dirstack () {
 local dir
 print -rNC1 -- $dirstack |
   fzf --read0 --print0 |
   IFS= read -rd '' dir &&
   cd -- $dir &&
   zle -I
}

zle -N fzf-change-dirstack
bindkey '^[p' fzf-change-dirstack  # shortcut ALT+P

要點是zle -II目前工作目錄發生更改時驗證提示,其餘部分修復程式碼中的一些其他問題,以便它可以使用任意目錄名稱。

cd +``Tab 另請注意,當您完成或僅完成 dirstack 元素作為任何命令的參數時, zsh 已經有自己的 dirstack 完成~+``Tab程序,而不僅僅是cd/ pushd

例如,嘗試cd +``Tab``Tab

zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' menu select=2
autoload compinit
compinit

並使用箭頭鍵導航。

(這種設置你通常會調整compinstall

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