oh-my-zsh 历史日期格式

oh-my-zsh history date formatting

我正在尝试格式化 oh-my-zsh 历史输出。 似乎 fc 是要走的路,因为 history 会忽略 HISTFILEHISTSIZEHISTTIMEFORMAT

中的任何设置

有没有办法像我一样格式化它 date

我在网上找不到任何关于 fc 命令的正确文档。也没有关于 fc.

的手册页

有用的是fc -flE以一种欧洲格式输出历史记录。

最后,我想做的是找出我今天和什么时候输入了多少命令。

这里有点问题

目前我有这个设置:

alias today='date +"%d.%m.%Y"' 没有允许我删除前导零的格式标记(我想要 6 而不是 06)

但我在这里有比奇怪的 zsh 历史命令 fc 更多的格式选项。 历史输出日期为 22.6.2016,today 为 22.06.2016 因此,我不能这样做: fc -flE | grep $(today) | wc -l

非常感谢任何反馈!

简答:

fc -li | grep $(date -I)

选项 -i 指示 fc 以 ISO 8601 yyyy-mm-dd HH:MM 格式打印时间戳。 -I 选项指示 date 以 ISO 8601 格式输出日期(不带时间)。


关于您遇到的问题:

  1. 由于 fczsh 的内置函数,您可以在 zshbuiltin manpage.

  2. 中找到它的文档
  3. 选项 -f(以美国 MM/DD/YY hh:mm 格式打印时间戳)和 -E(以欧洲 dd.mm.yyyy hh:mm 格式打印时间戳)是互斥的, -E 优先(静默,没有错误消息)。如果您不想要欧洲格式,请删除 -E 选项。

  4. 您可以使用选项 -t fmt 明确指定 fc 的时间戳格式。以下将打印时间戳,如 06/22/2016 - 23:07:09(注意零填充):

    fc -lt '%m/%d/%Y - %H:%M:%S'
    

    这使用 strftime 函数(有关 man 3 strftime 的更多信息)来格式化时间戳。因此格式选项几乎与您可以使用 date.

  5. 的格式选项相同
  6. 您可以使用 - 标志告诉 date 不要填充字段。例如 6/22/16:

    date +%-m/%-d/%y
    

    此标志也适用于 fc


稍微长一点的答案:

如果您更喜欢 ISO 8601 以外的其他时间戳格式,您可以只指定一个并将其用于 datefc。例如:未填充的美国日期格式和带秒的 0 填充时钟时间:

TS_DATE="%-m/%-d/%y"
TS_TIME="%H:%M:%S"
fc -lt "$TS_DATE $TS_TIME" | grep $(date +$TS_DATE)