我想写一个函数,让它更容易使用上一个命令的参数,比如!:1
. 我在 bash 中读过这可以通过以下方式完成:
set -o history
set -o histexpand
那么我怎样才能编写一个可以访问的 zsh 函数!:1
呢?
我想写一个函数,让它更容易使用上一个命令的参数,比如!:1
. 我在 bash 中读过这可以通过以下方式完成:
set -o history
set -o histexpand
那么我怎样才能编写一个可以访问的 zsh 函数!: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