如何获取当前的终端行(用户仍可编辑的终端行)?

如何获取当前的终端行(用户仍可编辑的终端行)?

我需要一种方法来使用用户输入的当前行作为 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

相关内容