zsh中的按目录历史记录


10

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插件,如何处理历史记录等等。

Answers:


6

有一个声称可以完全满足您的需求的插件,根据目录历史记录插件适当命名:

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

“每个目录的历史记录-跟踪每个当前目录和全局的先前命令历史记录,并具有在ctrl-g上即时切换它们的能力。” 说他们的维基。

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


1
很好,谢谢!如果您不介意,我会在接受之前尝试一下:)
AkiRoss

1
在我错过任何东西之前,该插件并不能完全满足我的需要,在某种意义上说,每个目录和全局历史记录是使用相互切换的ctrl-g(而不是我要求的优先级)。但是,我仍然觉得它非常有用,并且可以很好地回答我的问题,所以,谢谢:)
AkiRoss

也许是由于ZSH的更改所致,但是当前版本的此插件似乎无法正确处理ZSH的历史记录。
欧文

0

我只是写了一个小插件,可以完成Jim Hester插件的大部分工作,但是使用了另一种方法来解决该插件的GitHub存储库中列出的许多问题:

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

HISTFILE为执行命令的每个目录存储一个单独的目录,并在更改目录时添加了一个chpwdHISTFILEs 之间切换的钩子。

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

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

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


0

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

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

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

这也可以与我的插件一起使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.