我想使用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'
答案 0 :(得分: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'