0

我想写一个函数,让它更容易使用上一个命令的参数,比如!:1. 我在 bash 中读过这可以通过以下方式完成:

set -o history 
set -o histexpand

那么我怎样才能编写一个可以访问的 zsh 函数!:1呢?

4

1 回答 1

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 一样将其拆分 ( ${(z)...}) 并将其传递给somescript. 在somescript你可以做任何进一步的事情。如果您想使用 ZSH 进行脚本编写,请注意数组以1除非设置选项开始,KSH_ARRAYS而历史扩展以命令名称开头。0!:0

如果您想避免使用 of 的调用填充您的历史记录histaccess,您可以将其绑定到您的以下键(例如Alt+I.zshrc

zle -N histaccess
bindkey '^[i' histaccess
于 2014-01-17T14:38:39.157 回答