2015-06-12 11 views
12

W mojej funkcji fish, oceniam skonstruowaną linię poleceń przez eval (commandline), konkretnie - szukam jakiejś nazwy pliku z fzf, a następnie analizuję, czy linia poleceń została dodana z vim. Jeśli tak, zamiast zwracać vim filename, aby nacisnąć enter, po prostu oceniam to, co pokazałem wcześniej.Jak dodać wpis do historii muszli?

Chodzi o to, że jeśli ją oceniam, zamiast naciskać ręcznie, nie będzie historii - np. Nie widzę tego jako poprzedniego polecenia przez naciśnięcie.

Próbowałem set -x history (commandline) $history po eval, ale to pokazuje mi błąd set: Tried to change the read-only variable “history”

Czy istnieje sposób, aby ręcznie dodać niestandardowy ciąg (w moim przypadku bufora poleceń) do historii? dzięki.

Odpowiedz

6

history --merge nie łączy historii w porządku chronologicznym #2312. Więc nawet jeśli ręcznie dodamy to polecenie do ~/.config/fish/fish_history, nie będziemy w stanie po prostu naciskać w górę, aby to zobaczyć (chociaż dojdziemy do tego w końcu, jeśli wystarczająco mocno wciśniesz).

Aby obejść ten problem, możemy wykonać kopię: fish_history, a następnie zadzwonić pod numer builtin history --clear, co spowoduje wyczyszczenie historii wewnętrznej zarówno ryby, jak i historii. Następnie przywracamy plik historii z naszej kopii, dołączamy nasze polecenie i wywołujemy history --merge, aby scalić plik historii z pustą historią wewnętrzną.

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

Jestem pewien, że jest lepszy sposób na zrobienie tego, dlatego dodałem nagrodę do pytania –

Powiązane problemy