gpt4 book ai didi

小部件只能在 ZLE 处于事件状态时调用

转载 作者:行者123 更新时间:2023-12-03 13:37:20 25 4
gpt4 key购买 nike

我已经处理这个问题将近一个月了,我感到很沮丧,任何帮助将不胜感激。

我正在尝试为我的 takenote 编写一个小部件命令。小部件的目的是提供 ~/notes 中的所有 Markdown 文件。文件夹到 fzf以便用户可以选择其中一个并开始对其进行编辑。
用户输入 takenote 后并按下 <tab>我希望小部件能够运行。

这里是 _takenote.zsh小部件定义:

#compdef takenote
local file=$( find -L "$HOME/notes/" -print 2> /dev/null | fzf-tmux +m )
zle reset-prompt
compadd $file
return 1

不幸的是,由于 zle reset-prompt,上面的代码不起作用,如果我删除它,那么结果将是这样的:

before selection

选择文件后,它会变成:

After selecting the file

如您所见,这会破坏提示和命令本身。
在我看来,我需要做的是做一个 zle reset-prompt在调用 compadd 之前但这只有在我将函数绑定(bind)到键时才有效,否则,我将收到以下错误:

小部件只能在 ZLE 处于事件状态时调用

最佳答案

我在尝试使用 bindkey 时遇到了同样的错误让小部件使用 vim 打开 fzf选定的文件。原来我必须在 function1 中打开文件然后有一个function2调用 function1 然后 reset-prompt避免这种情况widgets can only be called when ZLE is active错误。就像你说的,真的是令人沮丧我花了将近一天的时间才弄清楚!

示例代码:

## use rg to get file list
export FZF_DEFAULT_COMMAND='rg --files --hidden'

## file open (function1)
__my-fo() (
setopt localoptions pipefail no_aliases 2> /dev/null
local file=$(eval "${FZF_DEFAULT_COMMAND}" | FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} --reverse $FZF_DEFAULT_OPTS --preview 'bat --color=always --line-range :500 {}'" $(__fzfcmd) -m "$@" | while read item; do
echo -n "${(q)item}"
done)
local ret=$?
if [[ -n $file ]]; then
$EDITOR $file
fi
return $ret
)

## define zsh widget(function2)
__my-fo-widget(){
__my-fo
local ret=$?
zle reset-prompt
return $ret
}

zle -N __my-fo-widget
bindkey ^p __my-fo-widget

关于小部件只能在 ZLE 处于事件状态时调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48055589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com