zsh 在 zle 小部件中读取输入

zsh 在 zle 小部件中读取输入

我正在尝试实现按下时 zsh 历史搜索的自定义版本ctrl-r(尽管我的功能将映射到不同的快捷方式)。

到目前为止,我已尝试使用readvaredread-command在用户按下定制的快捷键后读取输入。我的代码如下:

# Bind \eg to `git status`
function _cust-hist {
    zle -I
    local line
    read -r line
    echo $line
    zle accept-line
}
zle -N _cust-hist
bindkey '\eg' _cust-hist

但似乎什么都没起作用。我肯定忽略了一些显而易见的东西,zsh 能做到这一点吗?

答案1

是的,这绝对有可能。

这应该可以帮助你入门:

function _cust-hist {
  local REPLY
  autoload -Uz read-from-minibuffer

  # Create a sub-prompt, pre-populated with the current contents of the command line.
  read-from-minibuffer 'History search: ' $LBUFFER $RBUFFER

  # Use the modified input to search history & update the command line with it.
  LBUFFER=$(echo "$(fc -ln $REPLY $REPLY)" )
  RBUFFER=''

  # Put some informational text below the command line.
  zle -M "History result for '$REPLY'."
}
zle -N _cust-hist
bindkey '\eg' _cust-hist

如果你对它的工作原理感兴趣read-from-minibuffer,你可以找到它的源代码在这里。如您所见,它使用read -kzle recursive-edit来获取来自用户的输入。

相关内容