Overzicht van zhist
zhist is een tool voor de zsh-shell, geschreven in Go, die de standaard geschiedisopslag vervangt om meer context aan commando's toe te voegen. In plaats van enkel het commando en tijdstempel op te slaan, registreert zhist ook de werkmap waarin het commando werd uitgevoerd en de uiteindelijke exitstatus.
Belangrijkste kenmerken:
- Contextuele Picker: Door integratie met
fzf worden mislukte commando's in het rood weergegeven. Gebruikers kunnen via sneltoetsen (ctrl-g) schakelen tussen de globale geschiedenis en de geschiedenis van de huidige map.
- Installatie & Configuratie: De tool wordt geïnstalleerd via Go en geactiveerd in
.zshrc middels eval "$(zhist init)". Bestaande zsh-geschiedenis kan eenmalig worden geïmporteerd.
- Filtering: Gebruikers kunnen bepaalde commando's uitsluiten van registratie door middel van een
HIST_EXCLUDE array of door een spatie aan het begin van een commando te plaatsen.
- Systeemoptimalisatie: Om conflicten te voorkomen, wordt aangeraden de native zsh-geschiedenisinstellingen (zoals
SAVEHIST) aan te passen, zodat zhist de enige verantwoordelijke is voor de persistente opslag.
- CLI Beheer: De tool biedt een complete command line interface voor het toevoegen, opvragen en verwijderen van geschiedenisvermeldingen.
zhist - Slimmere shellgeschiedenis voor zsh
Doel
De standaard zsh-geschiedenis slaat enkel een commando en een tijdstempel op. zhist voegt hier context aan toe: waar je een commando hebt uitgevoerd en of dit is mislukt. De fzf-picker maakt gebruik van deze context, waardoor mislukte commando's in het rood worden weergegeven. Met één toetscombinatie kan er geschakeld worden tussen de globale geschiedenis en de geschiedenis van de huidige map.
Installatie
Installeer de tool via Go:
go install github.com/overflowy/zhist@latest
Vereisten: Voor de picker is fzf versie 0.45 of nieuwer vereist.
Configuratie
Voeg de volgende regel toe aan je .zshrc:
eval "$(zhist init)"
Om bestaande geschiedenis eenmalig te importeren, gebruik je:
zhist import ~/.zsh_history
Let op: Geïmporteerde vermeldingen bevatten geen map of exitstatus. Deze tonen een lege map en worden nooit in het rood weergegeven.
Sneltoetsen
| Toets | Actie |
ctrl-r | Open de geschiedenis-picker |
up / down | Open de picker bij een lege regel; anders stap door de regelgeschiedenis |
ctrl-g | Schakel tussen globale geschiedenis en huidige map |
ctrl-d | Verwijder de geselecteerde vermelding |
ctrl-x | Verwijder alle vermeldingen met hetzelfde commando |
tab | Accepteer het commando en laat deze op de regel staan |
Commando's negeren
Om te voorkomen dat bepaalde commando's in de opslag terechtkomen, kun je een HIST_EXCLUDE array definiëren in .zshrc. zhist slaat een commando over wanneer het eerste woord in deze array voorkomt.
Voorbeeld:
HIST_EXCLUDE=(cd ls clear pwd exit)
Kenmerken van uitsluiting:
- De matching is exact en hoofdlettergevoelig, en geldt alleen voor het eerste woord (bijv.
ls slaat ls -la over, maar niet lsd).
- Bij commando's met meerdere regels bepaalt het eerste woord van de eerste regel of het commando wordt overgeslagen.
- De hook leest de array op het moment van registratie; wijzigingen in een actieve shell worden direct toegepast op het volgende commando.
- Een spatie aan het begin van een commando zorgt er ook voor dat de registratie wordt overgeslagen (voor incidentele uitsluitingen).
Aanbevolen zsh-geschiedenisinstellingen
Omdat zhist verantwoordelijk is voor de persistente opslag, is het aanbevolen om de native geschiedenis alleen in het geheugen te houden voor het terugstappen door regels en ! expansie binnen een sessie.
unset HISTFILE # macOS /etc/zshrc stelt dit in; unset stopt zsh met het lezen of schrijven van het bestand
HISTSIZE=100000 # Geheugenevenementen voor pijl-omhoog en ! expansie
SAVEHIST=0 # Schrijf nooit een geschiedenisbestand
setopt BANG_HIST # Behandel het '!' teken speciaal tijdens expansie
setopt HIST_IGNORE_DUPS # Registreer geen vermelding die zojuist al is geregistreerd
setopt HIST_IGNORE_ALL_DUPS # Verwijder oude registratie als nieuwe registratie een duplicaat is
setopt HIST_FIND_NO_DUPS # Toon geen regel die eerder is gevonden
setopt HIST_IGNORE_SPACE # Registreer geen vermelding die begint met een spatie
setopt HIST_REDUCE_BLANKS # Verwijder overbodige spaties voor registratie van de vermelding
setopt HIST_VERIFY # Voer niet direct uit na geschiedenisexpansie
Stel SHAREHISTORY, INCAPPENDHISTORY of EXTENDEDHISTORY niet in. Deze beïnvloeden alleen het geschiedenisbestand, dat door zhist wordt vervangen.
Compatibiliteitsopmerkingen
- Commando's met een spatie aan het begin worden niet geregistreerd. Dit komt overeen met de werking van
HISTIGNORESPACE.
- De opdracht
eval "$(zhist init)" moet worden uitgevoerd na plugins die ctrl-r of de pijltjestoetsen binden (zoals atuin, zsh-history-substring-search of prompt pickers). De laatste binding is leidend.
- De record hook voegt zichzelf toe aan
precmd_functions en geeft $? door. Prompts die de exitstatus in hun eigen precmd lezen, blijven gewoon werken.
CLI (Command Line Interface)
| Commando | Beschrijving |
zhist init | Print het zsh-integratiescript |
zhist add -dir D -exit N | Voeg een vermelding toe; commando wordt via stdin gelezen |
zhist list [-dir D] | Print vermeldingen voor fzf (nieuwste eerst, gededupliceerd) |
zhist get -id ID | Print het volledige commando van een vermelding |
zhist delete -id ID [-all] | Verwijder een vermelding, of alle vermeldingen met dat commando |
zhist import FILE | Importeer een zsh EXTENDED_HISTORY bestand |
zhist - Slimmere shellgeschiedenis voor zsh
Doel
De standaard zsh-geschiedenis slaat enkel een commando en een tijdstempel op. zhist voegt hier context aan toe: waar je een commando hebt uitgevoerd en of dit is mislukt. De fzf-picker maakt gebruik van deze context, waardoor mislukte commando's in het rood worden weergegeven. Met één toetscombinatie kan er geschakeld worden tussen de globale geschiedenis en de geschiedenis van de huidige map.
Installatie
Installeer de tool via Go:
go install github.com/overflowy/zhist@latest
Vereisten: Voor de picker is fzf versie 0.45 of nieuwer vereist.
Configuratie
Voeg de volgende regel toe aan je .zshrc:
eval "$(zhist init)"
Om bestaande geschiedenis eenmalig te importeren, gebruik je:
zhist import ~/.zsh_history
Let op: Geïmporteerde vermeldingen bevatten geen map of exitstatus. Deze tonen een lege map en worden nooit in het rood weergegeven.
Sneltoetsen
| Toets | Actie |
ctrl-r | Open de geschiedenis-picker |
up / down | Open de picker bij een lege regel; anders stap door de regelgeschiedenis |
ctrl-g | Schakel tussen globale geschiedenis en huidige map |
ctrl-d | Verwijder de geselecteerde vermelding |
ctrl-x | Verwijder alle vermeldingen met hetzelfde commando |
tab | Accepteer het commando en laat deze op de regel staan |
Commando's negeren
Om te voorkomen dat bepaalde commando's in de opslag terechtkomen, kun je een HIST_EXCLUDE array definiëren in .zshrc. zhist slaat een commando over wanneer het eerste woord in deze array voorkomt.
Voorbeeld:
HIST_EXCLUDE=(cd ls clear pwd exit)
Kenmerken van uitsluiting:
- De matching is exact en hoofdlettergevoelig, en geldt alleen voor het eerste woord (bijv.
ls slaat ls -la over, maar niet lsd).
- Bij commando's met meerdere regels bepaalt het eerste woord van de eerste regel of het commando wordt overgeslagen.
- De hook leest de array op het moment van registratie; wijzigingen in een actieve shell worden direct toegepast op het volgende commando.
- Een spatie aan het begin van een commando zorgt er ook voor dat de registratie wordt overgeslagen (voor incidentele uitsluitingen).
Aanbevolen zsh-geschiedenisinstellingen
Omdat zhist verantwoordelijk is voor de persistente opslag, is het aanbevolen om de native geschiedenis alleen in het geheugen te houden voor het terugstappen door regels en ! expansie binnen een sessie.
unset HISTFILE # macOS /etc/zshrc stelt dit in; unset stopt zsh met het lezen of schrijven van het bestand
HISTSIZE=100000 # Geheugenevenementen voor pijl-omhoog en ! expansie
SAVEHIST=0 # Schrijf nooit een geschiedenisbestand
setopt BANG_HIST # Behandel het '!' teken speciaal tijdens expansie
setopt HIST_IGNORE_DUPS # Registreer geen vermelding die zojuist al is geregistreerd
setopt HIST_IGNORE_ALL_DUPS # Verwijder oude registratie als nieuwe registratie een duplicaat is
setopt HIST_FIND_NO_DUPS # Toon geen regel die eerder is gevonden
setopt HIST_IGNORE_SPACE # Registreer geen vermelding die begint met een spatie
setopt HIST_REDUCE_BLANKS # Verwijder overbodige spaties voor registratie van de vermelding
setopt HIST_VERIFY # Voer niet direct uit na geschiedenisexpansie
Stel SHAREHISTORY, INCAPPENDHISTORY of EXTENDEDHISTORY niet in. Deze beïnvloeden alleen het geschiedenisbestand, dat door zhist wordt vervangen.
Compatibiliteitsopmerkingen
- Commando's met een spatie aan het begin worden niet geregistreerd. Dit komt overeen met de werking van
HISTIGNORESPACE.
- De opdracht
eval "$(zhist init)" moet worden uitgevoerd na plugins die ctrl-r of de pijltjestoetsen binden (zoals atuin, zsh-history-substring-search of prompt pickers). De laatste binding is leidend.
- De record hook voegt zichzelf toe aan
precmd_functions en geeft $? door. Prompts die de exitstatus in hun eigen precmd lezen, blijven gewoon werken.
CLI (Command Line Interface)
| Commando | Beschrijving |
zhist init | Print het zsh-integratiescript |
zhist add -dir D -exit N | Voeg een vermelding toe; commando wordt via stdin gelezen |
zhist list [-dir D] | Print vermeldingen voor fzf (nieuwste eerst, gededupliceerd) |
zhist get -id ID | Print het volledige commando van een vermelding |
zhist delete -id ID [-all] | Verwijder een vermelding, of alle vermeldingen met dat commando |
zhist import FILE | Importeer een zsh EXTENDED_HISTORY bestand |