Zsh
當我按 Tab 完成時,由“沒有此類小元件”導致的鍵綁定、功能/選項或完成不明確
我安裝了
zplug
:zplug "junegunn/fzf-bin", from:gh-r, as:command, rename-to:fzf, use:"*${(L)$(uname -s)}*amd64*" zplug "junegunn/fzf", use:"shell/*.zsh", defer:2 zplug "peco/peco", as:command, from:gh-r, use:"*${(L)$(uname -s)}*amd64*" zplug "lincheney/fzf-tab-completion", use:"zsh/fzf-zsh-completion.sh"
請注意,我也有
zsl-autosuggestions
並zsh-completions
安裝了。選項/功能 - 我試圖評論其中一個導致
No such widget
:autoload -Uz async && async autoload -Uz add-zsh-hook autoload -Uz compinit && compinit autoload -Uz url-quote-magic autoload -Uz vcs_info setopt autocd setopt append_history setopt auto_list setopt auto_menu setopt auto_pushd setopt extended_history setopt hist_expire_dups_first setopt hist_find_no_dups setopt hist_ignore_dups setopt hist_ignore_all_dups setopt hist_reduce_blanks setopt hist_save_no_dups setopt hist_ignore_space setopt inc_append_history setopt interactive_comments setopt magic_equal_subst setopt print_eight_bit setopt print_exit_value setopt prompt_subst setopt pushd_ignore_dups setopt share_history setopt transient_rprompt watch=(notme) LOGCHECK=60 REPORTTIME=5
鍵綁定 –
bindkey '^I' fzf_completions
是由No such widget
. 但如果我評論它並按下Tab
,它仍然會給出No such widget
1’`。bindkey "^[[H" beginning-of-line bindkey "^[[F" end-of-line bindkey '^I' fzf_completions KEYTIMEOUT=1 WORDCHARS='*?_-[]~=./&;!#$%^(){}<>'
檢查:
if zplug check "junegunn/fzf-bin"; then export FZF_DEFAULT_OPTS="--height 40% --reverse --border --inline-info --color=dark,bg+:235,hl+:10,pointer:5" fi if zplug check "zsh-users/zsh-autosuggestions"; then ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#ACB31D,bg=#0087AF,bold,underline" fi if zplug check "junegunn/fzf-bin"; then alias base="base64" alias decode="decode64" alias encode="encode64" fi
補全——我也試著評論每一個來解決,但問題還不清楚:
zstyle ':completion::complete:*' gain-privileges 1 zstyle ':completion:*:descriptions' format '%B%d%b' zstyle ':completion:*:descriptions' format '%U%F{yellow}%d%f%u' zstyle ':completion:*:messages' format '%d' zstyle ':completion:*:warnings' format 'No matches for: %d' zstyle ':completion:*' completer _expand _complete _ignored _approximate zstyle ':completion:*' group-name '' zstyle ':completion:*' menu select=2 zstyle ':completion:*' rehash true zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s' zstyle ':completion:*' verbose yes zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*' zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
原因的起源仍不清楚。我不知道是什麼原因造成的。
當
No such widget
您的按下Tab
意味著您有一個bindkey
聲明已綁定Tab
到一個實際上不存在的小元件,或者您綁定到的小元件Tab
正在嘗試呼叫另一個不存在的小元件。要找出綁定到您的
Tab
密鑰的內容,請執行bindkey '^I'
這將輸出類似
"^I" fzf-completion
要確定此小元件是否存在:
- 在您的
~/.zshrc
文件中,禁用zsh-autosuggestions
.- 重啟你的終端。
- 然後做
zle -lL fzf-completion
如果小元件不存在,則上面的命令將不輸出任何內容。在這種情況下,您已經找到了問題所在。然後,您可以通過將
Tab
密鑰綁定到確實存在的小元件來修復它。如果上面的命令輸出如下內容:
sh zle -N fzf-completion
或者類似sh zle -C complete-word .complete-word _main_complete
則該小元件存在。在這種情況下,輸出中的最後一個單詞會告訴您實現小元件的函式的名稱。然後,您可以執行以下操作來找出函式的來源:
type fzf-completion
這將輸出類似
fzf-completion is a shell function from /path/to/fzf/completion/completion
然後,您可以打開文件以檢查程式碼。或者,如果您願意,可以打開該功能的跟踪,如下所示:
functions -t fzf-completion
在任一情況下,嘗試尋找類似的語句
zle widget-name
。然後,您可以嘗試以上述方式查看該小元件是否存在。這樣,您可以找到出錯的確切位置,然後解決問題。