2015-06-12 10 views
12

Nella mia funzione pesce, sto valutando la linea di comando costruita tramite eval (commandline), in particolare: sto cercando un nome file da fzf, quindi analizzo se la riga di comando è stata aggiunta a vim. Se lo fosse, invece di restituire vim filename per premere invio successivamente, lo valuterò, come ho mostrato prima.Come aggiungere una voce alla cronologia della shell di pesce?

Il fatto è che se lo valuto, invece di premere invio manualmente, non sta andando alla cronologia - ad es. Non riesco a vederlo come comando precedente premendo su.

ho cercato set -x history (commandline) $history dopo eval, ma mi mostra un errore set: Tried to change the read-only variable “history”

Esiste un modo per aggiungere manualmente stringa personalizzata (nel mio buffer di riga di comando caso) per la storia? grazie.

risposta

6

history --merge non unisce la cronologia in ordine cronologico #2312. Quindi, anche se aggiungiamo manualmente il comando a ~/.config/fish/fish_history, non saremo in grado di premere semplicemente su per vederlo (anche se ci arriverete alla fine se premete abbastanza).

Per aggirare il problema, è possibile effettuare una copia di fish_history quindi chiamare builtin history --clear che cancellerà la cronologia interna di entrambi i pesci e il file di cronologia. Quindi ripristiniamo il file di cronologia dalla nostra copia, aggiungiamo il nostro comando e chiamiamo history --merge per unire il file di cronologia con la cronologia interna ora vuota.

function evalh 
    eval $argv 

    # backup history file 
    cp ~/.config/fish/fish_history /tmp/fish_history.tmp 

    # clear internal history and history file (using builtin means we don't get a prompt) 
    builtin history --clear 

    # restore history file 
    cp /tmp/fish_history.tmp ~/.config/fish/fish_history 

    # append our command 
    echo "- cmd:" $argv >> ~/.config/fish/fish_history 
    echo " when:" (date "+%s") >> ~/.config/fish/fish_history 

    # merge history file with (empty) internal history 
    history --merge 
end 
+0

Sono sicuro che c'è un modo migliore per farlo, quindi perché ho aggiunto una taglia alla domanda –

Problemi correlati