前缀空格

前缀空格

在 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),请在运行它之前在其前面加上空格。

man zshoptions,“历史”部分

定义忽略模式

要自动排除与给定模式匹配的所有命令写入历史文件(但仍可在会话的本地历史记录中使用),请将其添加到您的.zshrc文件

HISTORY_IGNORE='<pattern>'

man zshparam, “Shell 使用的参数”部分

定义自己的忽略逻辑

为了以更复杂的方式从历史记录中排除行,您可以在文件中定义.zshrc此函数

zshaddhistory() {
  ...
}

它接收相关历史行作为参数并返回

  • 0要将该行保存到历史记录中,
  • 1从历史记录中删除该行(一旦执行了下一个命令行或退出了 shell),或者
  • 2将该行包含在会话的本地历史记录中但不将其写入$HISTFILE

man zshmisc, “特殊功能”部分

您甚至可以通过将文件添加到您的.zshrc文件中来定义具有任意名称的多个此类函数

autoload -Uz add-zsh-hook

进而

add-zsh-hook zshaddhistory <function name>

对于每个这样的函数。

man zsh contrib, “操作钩子函数”部分

相关内容