Использование переменных в качестве аргументов команды в Zsh

Я пытаюсь написать функцию для zsh, чтобы найти файлы с помощью fzf и напрямую открыть их в моем редакторе. Аргументы для вызова fzf хранятся в переменной следующим образом:

FZF_FILE_PREVIEW="--preview 'cat {}) 2> /dev/null | head -200'"

функция выглядит так:

fzf_find_edit() {
    local file=$(fzf ${FZF_FILE_PREVIEW})
    if [[ -n $file ]]; then
        $EDITOR $file
    fi
}

Но похоже FZF_FILE_PREVIEW не раскрывается правильно, потому что, когда я запускаю функцию, я получаю:

unknown option: --preview 'cat {}) 2> /dev/null | head -200'

Если я прямо бегу

fzf --preview 'cat {}) 2> /dev/null | head -200'

это работает как ожидалось.

Как я могу получить переменную для правильного расширения?

1 ответ

С помощью IRC-канала zsh я решил решить эту проблему:

Переменная получает массив, используя ():

FZF_FILE_PREVIEW=(--preview 'cat {}) 2> /dev/null | head -200')

и тогда можно ссылаться как:

file=($(fzf ${FZF_FILE_PREVIEW}))

только при экспорте массива это становится сложнее:

export FZF_CTRL_T_OPTS=${(j< >)${(@q-)FZF_FILE_PREVIEW}}

объединяет элементы массива, дальнейшие объяснения в документах.

Другие вопросы по тегам