Separare il lookback della freccia per la storia locale e globale di ZSH

È ansible…

… separatamente.

Ad esempio, si potrebbe bind CTRL + verso la cronologia globale, normale per la cronologia locale. Allo stesso tempo, ha senso usare la storia globale per una ricerca storica all'indietro (cioè CTRL + R ).

Ciò potrebbe accelerare alcune operazioni di shell, poiché alcune operazioni sono specifiche a quella window di shell e si desidera tornare in esse.

Copia & incolla questo a .zshrc :

I cursori utilizzano la cronologia locale:

 bindkey "${key[Up]}" up-line-or-local-history bindkey "${key[Down]}" down-line-or-local-history up-line-or-local-history() { zle set-local-history 1 zle up-line-or-history zle set-local-history 0 } zle -N up-line-or-local-history down-line-or-local-history() { zle set-local-history 1 zle down-line-or-history zle set-local-history 0 } zle -N down-line-or-local-history 

Se hai bisogno anche di legami chiave (cursori CTRL +) per passare attraverso la storia globale aggiungere anche questo al tuo .zshrc :

 bindkey "^[[1;5A" up-line-or-history # [CTRL] + Cursor up bindkey "^[[1;5B" down-line-or-history # [CTRL] + Cursor down 

Per fare questo lavoro è necessario abilitare l'opzione SHARE_HISTORY (vedere la sezione 16.2.4 Cronologia ). Esegui setopt e controlla se "sharehistory" è elencato. Se non aggiungi setopt sharehistory a .zshrc . Quindi si può usare set-local-history come abbiamo fatto sopra. La documentazione dice:

Per impostazione predefinita, i comandi di movimento della cronologia visualizzano le linee importte e le righe locali, ma è ansible triggersre e distriggersre il binding dello zle di set-local-history. È inoltre ansible creare un widget zle che farà alcuni comandi ignorare i comandi importti e alcuni li includeranno.

Si noti che per impostazione predefinita si utilizza la cronologia globale (e tutte le funzioni terminano con "zle set-local-history 0", vale a dire la cronologia locale è distriggersta). Quindi premendo CTRL + R cercherà la cronologia globale per impostazione predefinita (che ha senso nella maggior parte dei casi).

Questo è abbastanza simile alla soluzione di @mpy, ma è pronto per copiare e incollare. Sovrascrive i tasti cursore su e giù. Ho usato questa voce di posta .

Guarda anche:

È ansible impostare un widget speciale zle per visualizzare solo gli elementi della storia locale:

 function only-local-history () { zle set-local-history 1 zle up-history zle set-local-history 0 } zle -N only-local-history 

Supponendo che sia legato a up-line-or-history (penso che sia l'impostazione predefinita), è ansible bind questo widget a un'altra chiave, come CTRL + :

  bindkey "^[Oa" only-local-history 

Se questo funziona probabilmente dipende dal tuo terminal. Sopra la linea funziona in URxvt/Screen . Con xterm avrai bisogno

  bindkey "^[[1;5A" only-local-history 

per CTRL + .

Un'altra variante potrebbe essere

 function peek-history () { zle set-local-history zle up-history zle set-local-history } zle -N peek-history 

così, se hai abilitato la storia locale, puoi sbirciare in quello globale o viceversa.

La risposta di lumbic ha funzionato solo per me con alcuni cambiamenti:

 setopt share_history up-line-or-local-history() { zle set-local-history 1 zle up-line-or-history zle set-local-history 0 } zle -N up-line-or-local-history down-line-or-local-history() { zle set-local-history 1 zle down-line-or-history zle set-local-history 0 } zle -N down-line-or-local-history bindkey '^[OA' up-line-or-history # Cursor up bindkey '^[OB' down-line-or-history # Cursor down bindkey '^[[1;5A' up-line-or-local-history # [CTRL] + Cursor up bindkey '^[[1;5B' down-line-or-local-history # [CTRL] + Cursor down 

Questo codice rende la cronologia globale l'impostazione predefinita e utilizza la freccia CTRL per la cronologia locale.

Nota: utilizzo zsh 5.0.2 insieme a oh-my-zsh.