页次: 1
1. 实际结果:命令行 按下 ctrl+t 后 选择 某个文件
$
> png
81605/217921 (0)
> ./screen/jietu4.png
./screen/jietu2.png
./screen/jietu1.png
./screen/jietu3.png
./screen/zhoubao.png
按回车
$ ./screen/jietu4.png
2. 我想要的结果: 按下 ctrl+t 后 选择 某个文件
$
> png
81605/217921 (0)
> ./screen/jietu4.png
./screen/jietu2.png
./screen/jietu1.png
./screen/jietu3.png
./screen/zhoubao.png
按回车 (这个时候想要他执行 cd $(dirname ./screen/jietu4.png) 这个命令 cd 到文件所在的文件夹 )
$~/screen
3. 就是说 fzf 选择搜索的结果 然后 按 enter 的过程中 有没有 什么拦截的操作,可以 把 获取 的路径拦截 ,用我自定义的命令 处理一下 最后 执行
./screen/jietu4.png ----> cd $(dirname ./screen/jietu4.png) ---> ~/screen
离线
fzf 获取的路径不是打在标准输出上了吗?你那个放在命令行上的,是你的 shell 插件做的。你不用它就好了。
离线
fzf 获取的路径不是打在标准输出上了吗?你那个放在命令行上的,是你的 shell 插件做的。你不用它就好了。
我用的是zsh , 就是默认 的 fzf 太弱了 ,然后 安装 fzf 的时候 他 自动 给我 在 zsh 里面 定义 了 alt+c 和 ctrl+ t 这两个好用的功能 ,一个是跳转 文件夹的 cd ,另一个是 把文件路径 显示在 命令行上的
我现在想要 的是 改造 这个 ctrl+ t 功能 ,因为你搜索出来 以后 打在 命令行上面 没有用呀, 我还得 把光标 ctal+a 移动到行首 ,然后 输入 vim (结果) 或者 cd (dirname (结果)) 这样的 很不方便
所以我想自己定义下 这个 ctrl+ t 功能 ,但是 没有找到资料 ……
离线
所以你自己写个 widget 调用 fzf 就好了呀。不知道怎么写 zle widget 的话可以先去看 zsh guide 然后看 zsh 的手册。
或者参考一下我的 sk-tools: https://github.com/lilydjwg/dotzsh/blob … -tools.zsh
离线
所以你自己写个 widget 调用 fzf 就好了呀。不知道怎么写 zle widget 的话可以先去看 zsh guide 然后看 zsh 的手册。
或者参考一下我的 sk-tools: https://github.com/lilydjwg/dotzsh/blob … -tools.zsh
有个人回复我了! 答案是 这个
fzf-file-widget() {
cd ${$(__fsel):h}
local ret=$?
# 这两行是刷新 prompt 的,可以去掉,
zle push-line-or-edit
zle accept-line
return $ret
}
zle -N fzf-file-widget
bindkey '^T' fzf-file-widget
我去看看 zsh 帮助 ,谢谢你 !
离线
这刷新提示符的用法好奇特。直接 zle reset-prompt 不好么。
离线
这刷新提示符的用法好奇特。直接 zle reset-prompt 不好么。
我大概明白了,
__fsel 应该是调用 fzf 的命令
$(__fsel):h 是 把是取目录名,即最后一个 / 之前的部分,如果没有 / 则为 .
现在的问题是
为什么要返回 cd xxx 这个命令的结果呢?
离线
~/.zshrc:
function fzf_open_with {
file="$(fzf --reverse)"
dir="${file%/*}"
if [ -n "$file" ]; then # in case you press <Esc> and fzf returns zero length of string
"$1" "$file" 2>/dev/null || "$1" "$dir";
fi
}
export EDITOR="vim"
export PDFVIEWER="zathura"
export FILE_MANAGER="lf"
alias \
fv='fzf_open_with $EDITOR' \
fz='fzf_open_with $PDFVIEWER' \
fr='fzf_open_with cd; $FILE_MANAGER' \
fcd='fzf_open_with cd'
最近编辑记录 tanloong (2021-12-01 13:20:37)
离线
~/.zshrc:
function fzf_open_with { file="$(fzf --reverse)" dir="${file%/*}" if [ -n "$file" ]; then "$1" "$file" 2>/dev/null || "$1" "$dir"; fi } export EDITOR="vim" export PDFVIEWER="zathura" export FILE_MANAGER="lf" alias \ fv='fzf_open_with $EDITOR' \ fz='fzf_open_with $PDFVIEWER' \ fr='fzf_open_with cd; $FILE_MANAGER' \ fcd='fzf_open_with cd'
哇,你这个也好,拿去用了, 谢谢
离线
页次: 1