zsh 中每个目录的历史记录

zsh 中每个目录的历史记录

我很高兴使用了zsh一段时间,并且我对我的历史设置非常满意,它们是:

# Write to history immediately
setopt inc_append_history
# History shared among terminals
setopt share_history
# Save extended info in history
setopt extended_history
# Ignore duplicates
setopt hist_ignoredups

但经常发生我需要在某些特定目录中使用特定命令的情况。例如,当我在时,~/my_project我通常调用make target1 && ./run1,但是当我在时,~/second_project我通常需要make target2 && cat foobar | ./run2

即:不同的目录,但相似的命令。

因此,我通常cd ~/my_project会输入内容make,然后在历史记录中向后搜索,直到找到我需要的内容。但如果碰巧我工作过second_project,在搜索历史记录时我会发现一些我不需要的命令。

所以,我的问题:zsh 是否存在插件/设置/某些东西,以便在历史记录中搜索时,首先显示在当前目录中调用的命令?

理想情况下,每个其他匹配的历史命令都会出现在这些命令之后,可以选择指定最大优先级元素数量。

我会尝试自己写这样的东西,但我仍然不知道如何编写自定义 zsh 插件,如何处理历史记录等等。

答案1

有一个插件声称可以完全满足您的需求,并且名称恰当每个目录历史记录插件:

https://github.com/jimhester/oh-my-zsh/commit/baa187e4b903f39422a84b580e6e617ec3738e09

“每个目录历史记录 - 跟踪每个当前目录和全局的先前命令历史记录,并能够在它们之间动态切换,绑定到 ctrl-g。”他们的维基说。

我自己还没有测试过它,但根据评论它应该可以工作。

答案2

当前版本的 oh-my-zsh 附带了该插件。只需添加per-directory-history到您的插件列表中.zshrc

plugins=(... per-directory-history)

答案3

我遇到了完全相同的问题并编写了一个 ZSH 插件来解决它: https://github.com/tymm/zsh-directory-history

使用我的插件时,您不必在全局历史记录和目录历史记录之间手动切换。

理想情况下,每个其他匹配的历史命令都会出现在这些命令之后,可以选择指定最大优先级元素数量。

这对于我的插件来说也是开箱即用的。

答案4

我刚刚编写了一个小插件,它完成了 Jim Hester 插件的大部分功能,但使用了不同的方法来修复该插件的 GitHub 存储库中列出的许多问题:

https://github.com/ericfreese/zsh-cwd-history

HISTFILE它为您在其中执行命令的每个目录存储一个单独的目录,并添加一个钩子以在您更改目录时在 schpwd之间进行切换。HISTFILE

它还提供了一个 zle 小部件,您可以绑定到按键,该按键将HISTFILE在原始“全局”HISTFILEHISTFILE当前工作目录之间切换。

所以,我的问题:zsh 是否存在插件/设置/某些东西,以便在历史记录中搜索时,首先显示在当前目录中调用的命令?

zsh-cwd-history 插件目前不支持此功能,但我希望尽快添加对此的支持。

相关内容