我正在开发一个 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