我想编写一个函数,可以更轻松地使用上一个命令的参数,例如!:1
。我在bash中读到过这个可以通过以下方式完成:
set -o history
set -o histexpand
那么如何编写一个可以访问!:1
的zsh函数?
答案 0 :(得分:1)
首先,您不能在ZSH脚本中使用!
。
但是还有其他方法可以访问命令行历史记录:
$ echo foobar
foobar
$ fc -l -1
501 echo foobar
当然,这不能在脚本内部工作,因为它仍然试图访问历史记录,而非交互式zsh根本不存在。但是您可以将它合并到.zshrc
中的函数中并将其从那里传递给脚本:
function histaccess ()
{
lastcmd=$(fc -l -1)
somescript ${(z)${lastcmd#* }}
}
调用histaccess
将检索最后一个命令行(fc -l -1
),删除历史记录编号(${lastcmd#* }
),将其拆分为zsh will(${(z)...}
)并传递给它到somescript
。在somescript
中,您可以继续做任何事情。如果您想使用ZSH编写脚本,请注意,除非设置选项1
,否则数组以KSH_ARRAYS
开头,而历史记录扩展以0
开头,!:0
为命令名。
如果您想通过histaccess
来电来避免填写历史记录,可以将其绑定到Alt+I
中的密钥(例如.zshrc
):
zle -N histaccess
bindkey '^[i' histaccess