2015-06-12 3 views
12

В моей функции рыбы я оцениваю построенную командную строку через eval (commandline), в частности - Я ищу имя файла из fzf, а затем проанализирую, была ли добавлена ​​командная строка с vim. Если бы это было - вместо того, чтобы возвращать vim filename, чтобы нажать enter после этого, я просто оцениваю его, как я показал ранее.Как добавить запись в историю раковины?

Дело в том, что если я его оцениваю, вместо того, чтобы нажимать вводить вручную, он не будет вести историю - например. Я не вижу его в качестве предыдущей команды, нажимая.

Я попытался set -x history (commandline) $history после Eval, но он показывает мне ошибку set: Tried to change the read-only variable “history”

Есть ли способ, чтобы вручную добавить пользовательскую строку (в моем случае буфер командной строки) в истории? спасибо.

ответ

6

history --merge не объединяет историю в хронологическом порядке #2312. Поэтому, даже если мы вручную добавим команду в ~/.config/fish/fish_history, мы не сможем просто нажать на нее, чтобы увидеть ее (хотя вы доберетесь до нее, если будете достаточно нажимать).

Чтобы обойти это, мы можем сделать копию fish_history, а затем позвонить builtin history --clear, который очистит внутреннюю историю и историю рыб. Затем мы восстанавливаем файл истории из нашей копии, добавляем нашу команду и вызываем history --merge, чтобы объединить файл истории с пустой историей.

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

Я уверен, что есть лучший способ сделать это, поэтому почему я добавил щедрость на вопрос –

Смежные вопросы