当我按 Tab 完成时,由于“没有这样的小部件”导致按键绑定、功能/选项或完成不清晰

当我按 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}"

原因的根源仍不清楚。我不知道是什么原因造成的。

答案1

No such widget当你按下时,意味着Tab你有一个bindkey声明绑定Tab到一个实际上不存在的小部件或者您绑定的小部件Tab正在尝试调用另一个不存在的小部件。


要找出与您的Tab密钥绑定的内容,请执行以下操作

bindkey '^I'

这将输出类似的内容

"^I" fzf-completion

要查明此小部件是否存在:

  1. 在你的~/.zshrc文件中,禁用 zsh-autosuggestions
  2. 重新启动您的终端。
  3. 然后做
    zle -lL fzf-completion
    

如果小部件确实不是存在,上面的命令将不会输出任何内容。在这种情况下,你就发现了问题所在。然后,您可以通过将Tab密钥绑定到一个小部件来修复它存在。


如果上面的命令输出类似这样的内容: ```sh zle -N fzf-completion ``` 或者类似 ```sh zle -Ccomplete-word .complete-word _main_complete ``` 则该小部件存在。在这种情况下,输出中单词的_last_告诉您实现该小部件的函数的名称。

然后,您可以执行以下操作来找出该函数的来源:

type fzf-completion

这将输出类似的内容

fzf-completion is a shell function from /path/to/fzf/completion/completion

然后您可以打开该文件来检查代码。或者,如果您愿意,可以打开该函数的跟踪,如下所示:

functions -t fzf-completion

在任一情况下,尝试寻找类似的语句zle widget-name。然后,你可以尝试看看是否小部件以上述方式存在。


这样,您就可以找到问题的确切位置,然后解决问题。

相关内容