Используйте FZF для отображения файлов git, отсортированных по дате (и установите значение по умолчанию в bash)
Я хочу использовать fzf для вывода списка всех файлов в git, отсортированных по дате модификации. (Я использую этот вывод в VIM)
Эта команда, кажется, работает:
(while read file; do echo $(git log --pretty=format:%ad -n 1 --date=raw -- $file) $file; done < <(git ls-tree -r --name-only HEAD) | sort -k1,1n | awk {"print \$3"}) 2> /dev/nul
Но как я могу получить это как команду FZF по умолчанию? Я пробовал это, но переменная FZF_DEFAULT_COMMAND остается пустой:
export FZF_DEFAULT_COMMAND='
(while read file; do echo $(git log --pretty=format:%ad -n 1 --date=raw -- $file) $file; done < <(git ls-tree -r --name-only HEAD) | sort -k1,1n | awk {"print \$3"}) 2> /dev/null'
Может мне нужно что-то сбежать?
Изменить: это команда, которую я сейчас использую:
export FZF_DEFAULT_COMMAND='(git ls-tree -r --name-only HEAD)|(while read file; do echo $(git log --pretty=format:%ad -n 1 --date=raw -- "$file") $file; done | sort -r | awk {"print \$3"}) 2> /dev/null'
1 ответ
Решение
fzf
использования /bin/sh
(Posix shell) для выполнения вашей команды. Даже если /bin/sh
связан с /bin/bash
это не удастся для не posix функций (например, подстановка процессов в вашем случае). Вы можете включить поддержку GNU/bash:
export FZF_DEFAULT_COMMAND='set +o posix
(while read file; do echo $(git log --pretty=format:%ad -n 1 --date=raw -- $file) $file; done < <(git ls-tree -r --name-only HEAD) | sort -k1,1n | awk {"print \$3"}) 2> /dev/null'
Если у вас нет bash
символическая ссылка на /bin/sh
, вам нужно избавиться от процесса подстановки:
export FZF_DEFAULT_COMMAND='
(git ls-tree -r --name-only HEAD)|(while read file; do echo $(git log --pretty=format:%ad -n 1 --date=raw -- $file) $file; done | sort -k1,1n | awk {"print \$3"}) 2> /dev/null'