Historique par répertoire dans zsh

10

J'utilise avec bonheur zshdepuis un certain temps maintenant, et je suis assez satisfait de mes paramètres d'historique, qui sont:

# 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

Mais il arrive souvent que je doive utiliser des commandes spécifiques dans certains répertoires spécifiques. Par exemple, quand je suis ~/my_projectdedans make target1 && ./run1, j'invoque habituellement , mais quand je suis dedans , ~/second_projectj'ai généralement besoin make target2 && cat foobar | ./run2.

C'est-à-dire: différents répertoires, mais des commandes similaires.

Donc, d'habitude, je cd ~/my_projecttape make, puis je fais une recherche en arrière dans l'histoire jusqu'à ce que je trouve ce dont j'ai besoin. Mais s'il arrive que je travaille second_project, lors de la recherche dans l'historique, je trouverai des commandes dont je n'ai pas besoin.

Donc, ma question: existe-t-il un plugin / paramètre / quelque chose pour zsh de telle sorte que, lors de la recherche dans l'historique, les commandes invoquées dans le répertoire courant s'affichent en premier?

Idéalement, toutes les autres commandes d'historique correspondant apparaîtront après celles-ci, en spécifiant éventuellement un nombre maximal d'éléments prioritaires.

J'essaierais d'écrire quelque chose comme ça par moi-même, mais je ne sais toujours pas comment écrire des plugins zsh personnalisés, comment gérer l'historique, etc.

AkiRoss
la source

Réponses:

6

Il existe un plugin qui prétend faire exactement ce que vous cherchez, nommé de manière appropriée par plugin d'historique de répertoire :

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

"Per-directory-history - suit l'historique des commandes précédentes à la fois par répertoire actuel et globalement, avec la possibilité de basculer entre eux à la volée, lié à ctrl-g." dit leur wiki.

Je ne l'ai pas testé moi-même (encore), mais selon les commentaires ça devrait marcher.

superuser0
la source
1
Bien, merci! Je vais l'essayer avant d'accepter, si cela ne vous dérange pas :)
AkiRoss
1
Jusqu'à ce que je manque quelque chose, le plugin ne correspond pas exactement à ce dont j'ai besoin, dans le sens où chaque répertoire et les historiques globaux sont mutuellement commutés à l'aide ctrl-g(et non par priorité comme je l'ai demandé). Néanmoins, je le trouve toujours extrêmement utile et une bonne réponse à ma question, alors merci :)
AkiRoss
C'est peut-être dû à des changements dans ZSH, mais ce plugin dans sa version actuelle ne semble pas gérer correctement la modification de l'historique de ZSH.
Owen
0

Je viens d'écrire un petit plugin qui fait une grande partie de ce que fait le plugin de Jim Hester, mais utilise une approche différente qui corrige de nombreux problèmes répertoriés dans le référentiel GitHub de ce plugin:

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

Il stocke un HISTFILErépertoire distinct pour chaque répertoire dans lequel vous avez exécuté des commandes et ajoute un chpwdcrochet pour basculer entre HISTFILEs lorsque vous changez de répertoire.

Il fournit également un widget zle que vous pouvez lier à une touche qui basculera HISTFILEentre votre "global" d'origine HISTFILEet le HISTFILEpour votre répertoire de travail actuel.

Donc, ma question: existe-t-il un plugin / paramètre / quelque chose pour zsh de telle sorte que, lors de la recherche dans l'historique, les commandes invoquées dans le répertoire courant s'affichent en premier?

Le plugin zsh-cwd-history ne le supporte pas actuellement, mais j'espère en ajouter bientôt.

Eric Freese
la source
0

J'ai eu exactement le même problème et j'ai écrit un plugin ZSH qui le résout: https://github.com/tymm/zsh-directory-history

Vous n'avez pas à basculer manuellement entre l'historique global et l'historique des répertoires lorsque vous utilisez mon plugin.

Idéalement, toutes les autres commandes d'historique correspondant apparaîtront après celles-ci, en spécifiant éventuellement un nombre maximal d'éléments prioritaires.

Cela fonctionne également hors de la boîte avec mon plugin.

tymm
la source