Использование переменных в качестве аргументов команды в 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}}
объединяет элементы массива, дальнейшие объяснения в документах.