使用 FZF 列出 git 个按日期排序的文件(并在 bash 中设置默认值)
Use FZF to list git files sorted by date (and set default in 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'
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'
我想使用 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'
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'