Cronologia per directory in zsh


10

Uso felicemente zshda un po 'di tempo e sono abbastanza soddisfatto delle mie impostazioni di cronologia, che sono:

# 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

Ma capita spesso di dover usare comandi specifici all'interno di alcune directory specifiche. Ad esempio, quando sono dentro di ~/my_projectsolito invoco make target1 && ./run1, ma quando sono dentro di ~/second_projectsolito ho bisogno make target2 && cat foobar | ./run2.

Cioè: directory diverse, ma comandi simili.

Quindi di solito cd ~/my_projectscrivo makee poi scrivo all'indietro nella storia fino a quando non trovo ciò di cui ho bisogno. Ma se succede che ho lavorato second_project, durante la ricerca della cronologia troverò alcuni comandi che non mi servono.

Quindi, la mia domanda: esiste un plugin / setting / qualcosa per zsh tale che, quando si cerca nella cronologia, i comandi richiamati nella directory corrente vengono visualizzati per primi?

Idealmente, ogni altro comando della cronologia corrispondente verrà visualizzato dopo quelli, specificando facoltativamente un numero massimo di elementi prioritari.

Proverei a scrivere qualcosa del genere da solo, ma non so ancora come scrivere plugin zsh personalizzati, come gestire la cronologia e così via.

Risposte:


6

Esiste un plug-in che afferma di fare esattamente quello che stai cercando, con un nome appropriato per il plug-in della cronologia delle directory :

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

"Cronologia per directory - tiene traccia della cronologia dei comandi precedenti sia per la directory corrente che a livello globale, con la possibilità di passare da una all'altra al volo, associata a ctrl-g." dice la loro wiki.

Non l'ho provato da solo (ancora), ma secondo i commenti dovrebbe funzionare.


1
Bene grazie! Lo proverò prima di accettare, se non ti dispiace :)
AkiRoss

1
Fino a quando non ho perso qualcosa, il plug-in non fa esattamente ciò di cui ho bisogno, nel senso che per directory e cronologie globali vengono scambiate reciprocamente usando ctrl-g(e non per priorità come ho chiesto). Tuttavia, lo trovo ancora estremamente utile e una buona risposta alla mia domanda, quindi grazie :)
AkiRoss

Forse è dovuto ai cambiamenti in ZSH, ma questo plugin nella sua versione attuale non sembra gestire correttamente la cronologia di ZSH.
Owen,

0

Ho appena scritto un piccolo plugin che fa molto di quello che fa il plugin di Jim Hester, ma usa un approccio diverso che risolve molti dei problemi elencati nel repository GitHub di quel plugin:

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

Memorizza un separato HISTFILEper ogni directory in cui hai eseguito i comandi e aggiunge un chpwdhook per passare da una HISTFILEs all'altra quando cambi directory.

Fornisce inoltre un widget zle che è possibile associare a un tasto premuto che alternerà HISTFILEtra il "globale" originale HISTFILEe il HISTFILEper la directory di lavoro corrente.

Quindi, la mia domanda: esiste un plugin / setting / qualcosa per zsh tale che, quando si cerca nella cronologia, i comandi richiamati nella directory corrente vengono visualizzati per primi?

Il plug-in zsh-cwd-history non supporta attualmente questo, ma spero di aggiungere presto supporto per questo.


0

Ho avuto lo stesso identico problema e ho scritto un plugin ZSH che lo risolve: https://github.com/tymm/zsh-directory-history

Non è necessario passare manualmente dalla cronologia globale a quella della directory quando si utilizza il mio plugin.

Idealmente, ogni altro comando della cronologia corrispondente verrà visualizzato dopo quelli, specificando facoltativamente un numero massimo di elementi prioritari.

Questo funziona anche con il mio plugin.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.