您可以为此使用自定义的zle小部件,并通过按键绑定来调用它,例如Alt+ Tab(与Esc,相同Tab)
expand-to-output () {
BUFFER='$('$BUFFER')'
CURSOR=0
zle redisplay
zle expand-word
}
zle -N expand-to-output
bindkey "^[^I" expand-to-output
现在,如果键入任何命令,然后加上Alt+ Tab,则如果命令可以成功运行,则整个命令将被其输出替换。如果命令无法成功运行,则键入的命令行将被包围,$(...)
但不会展开。如果有错误消息,则应将其打印在编辑缓冲区上方。对于多行提示,这可能无法可靠地工作。
解释:
expand-to-output () {...}
定义(新)expand-to-output
功能。BUFFER
包含当前命令行BUFFER='$('$BUFFER')'
放置$(
在)
命令行之前和之后。$(...)
等效于,`...`
但可以嵌套。CURSOR
是光标在命令行上的位置CURSOR=0
将光标放在(已编辑)命令行的开头,即on上$
。如果不将光标移到该位置,则可能会zsh
尝试在其中扩展单词$(...)
而不是整个过程替换。zle redisplay
重新显示编辑缓冲区。如果扩展的命令将某些内容打印到stderr,这可以防止显示错误。(注意:多行提示可能存在一些问题)zle expand-word
调用expand-word
小部件,通常通常将其称为Tab补全的一部分。zle -N expand-to-output
将函数注册为同名的小部件。bindkey "^[^I" expand-to-output
将expand-to-output
小部件绑定到Alt+ Tab。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句