我需要一种方法来使用用户输入的当前行作为 shell 函数的变量。
我当前的代码,可以通过ctrl+r调用
zle -N search
bindkey "^R" search
search () {
read str;
fc -ln -30 | grep $(printf "%q\n" "$str");
}
或者简单地,将其作为函数调用
search () {
fc -ln -30 | grep $(printf "%q\n" "$1");
}
更新:目标伪代码,作为 ctrl+r 调用的函数调用,不需要进一步的输入提示
zle -N search
bindkey "^R" search
search ()
echo ""; #for better formatting because ctrl+R is not enter so the BUFFER(current line) gets corrupted and looks messy and the current input is not correctly shown
fc -ln -30 | grep $(printf "%q\n" "$BUFFER"); #edited to be the solution where $BUFFER is the current terminal line
}
答案1
在 zle 小部件中,编辑缓冲区的内容在变量中可用$BUFFER
。$LBUFFER
包含光标左侧的内容(与 相同$BUFFER[1,CURSOR-1]
)和$RBUFFER
右侧的内容(与 相同$BUFFER[CURSOR,-1]
)。
对于打印包含到目前为止输入的字符串(最近 30 个)的先前命令行报告的小部件,您可以执行以下操作:
search() {
zle -I
print -rC1 -- ${(M)${history:0:30}:#*$BUFFER*}
}
zle -N search
bindkey '^R' search