在 Bash 中,我可以使用history -s
将一行添加到历史记录列表中。当我这样做时,命令本身不会保存在历史记录中。
$ history -s "another command"
$ history
# ...
# 100 another command
在 Zsh 中,print -s
实现了类似的功能,但有一个例外。
$ print -s "another command"
$ history
# ...
# 99 print -s "another command"
# 100 another command
如上所示,print
命令本身也保存在历史列表中。有没有办法阻止这种情况并history -s
在 Zsh 中模拟该命令?
答案1
Z Shell 中有多种方法可以解决这个问题,所有这些方法都可以同时使用。
前缀空格
添加到您的.zshrc
文件
setopt HIST_IGNORE_SPACE
然后,为了导致任何行从历史记录中删除(一旦执行下一个命令行或退出 shell),请在运行它之前在其前面加上空格。
定义忽略模式
要自动排除与给定模式匹配的所有命令写入历史文件(但仍可在会话的本地历史记录中使用),请将其添加到您的.zshrc
文件
HISTORY_IGNORE='<pattern>'
看man zshparam
, “Shell 使用的参数”部分。
定义自己的忽略逻辑
为了以更复杂的方式从历史记录中排除行,您可以在文件中定义.zshrc
此函数
zshaddhistory() {
...
}
它接收相关历史行作为参数并返回
0
要将该行保存到历史记录中,1
从历史记录中删除该行(一旦执行了下一个命令行或退出了 shell),或者2
将该行包含在会话的本地历史记录中但不将其写入$HISTFILE
。
您甚至可以通过将文件添加到您的.zshrc
文件中来定义具有任意名称的多个此类函数
autoload -Uz add-zsh-hook
进而
add-zsh-hook zshaddhistory <function name>
对于每个这样的函数。