模糊搜索历史记录:显示历史记录,保持多行命令的行完整

模糊搜索历史记录:显示历史记录,保持多行命令的行完整

我正在开发一个 zsh 小部件来模糊搜索历史记录。

skim-history() {
  origquery=${BUFFER}
  output=$(history -1 1 | sd '^[ ]*[0-9]*[ ]*' '' | sk --tac --no-sort --exact)

  if [ $? -eq 0 ]; then
    BUFFER=$output
  else
    BUFFER=$origquery
  fi

  CURSOR=$#BUFFER
}

zle     -N   skim-history
bindkey '^R' skim-history

history -1 1 | sd '^[ ]*[0-9]*[ ]*' '' | sk --tac --no-sort --exact标准差使用 sed 代替 sed,后者只是从开头删除数字。斯克是 fzf 的替代品。

除了多行命令之外,这个小部件运行得很好。

例如:它显示

在此输入图像描述

喜欢:

在此输入图像描述

因此,它将换行符替换为\n.这不是我想要的。

.zsh_history该命令在文件中如下所示:

: 1657176206:0;function brcd() {\
 cd $(broot --only-folders --hidden --cmd "$1;:pp")\
}\

我发现!NUM 以正确的格式获取历史记录。

在此输入图像描述

我需要对我的小部件进行哪些更改?我怎么解决这个问题?

答案1

在这里。解决办法是:

skim-history() {
  num=$(fc -l 1 -1 | sk --tac --no-sort --exact | rg -o '^[ ]*([0-9]*)[ ]*' -r '$1')

  if [ -n "$num" ]; then
      zle vi-fetch-history -n $num
  fi
}

zle     -N   skim-history
bindkey '^R' skim-history

相关内容