我该怎么用!在ZSH脚本中扩展?

时间:2013-12-31 06:42:50

标签: shell zsh zsh-completion

我想编写一个函数,可以更轻松地使用上一个命令的参数,例如!:1。我在bash中读到过这个可以通过以下方式完成:

set -o history 
set -o histexpand

那么如何编写一个可以访问!:1的zsh函数?

1 个答案:

答案 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