fd命令
简介
fd 是基于 Rust 开发的一个速度超快的命令行搜索工具,fd 旨在成为 Linux / Unix 下 find 命令的替代品。
fd的一些显着特征:
- 易于使用的语法 - fd * pattern *而不是find -iname * pattern * 。
- 多彩输出类似于ls命令之一 。
- 性能快。 开发人员的基准测试可在此处获得 。
- 默认情况下,智能搜索不区分大小写,如果图标容器为大写符号,则切换为区分大小写。
- 默认情况下不查看隐藏文件和目录 。
- 默认情况下不会查看*.gitignore* 。
- Unicode意识。
使用
模糊匹配
❯ fd plugin
bin/doc/img/zplugin.png
bin/doc/img/zplugin.svg
bin/doc/img/zplugin_refcard.png
bin/doc/img/zplugin_refcard.svg
bin/zmodules/Src/zdharma/zplugin.c
bin/zmodules/Src/zdharma/zplugin.mdd
fd 默认是不区分大小写和支持模糊查询的。
区分查找的类别
使用 -t
命令来区别要查找的内容
f, file 普通文件
d, directories 目录
l, symlink symbolic links
x, executable 可执行文件
e 空文件或者目录
使用,筛选文件夹
❯ fd -td plugin
plugins
snippets/OMZ::plugins
snippets/https--github.com--robbyrussell--oh-my-zsh--blob--master--plugins--fd
搜索指定目录
❯ fd plugin ~/.zinit/plugins
/root/.zinit/plugins/Aloxaf---fzf-tab/fzf-tab.plugin.zsh
/root/.zinit/plugins/romkatv---powerlevel10k/gitstatus/gitstatus.plugin.sh
/root/.zinit/plugins/romkatv---powerlevel10k/gitstatus/gitstatus.plugin.zsh
/root/.zinit/plugins/skywind3000---z.lua/z.lua.plugin.zsh
/root/.zinit/plugins/skywind3000---z.lua/z.lua.plugin.zsh.zwc
搜索隐藏文件
❯ fd -H plugin
.tmux/plugins
.tmux/plugins/tpm/HOW_TO_PLUGIN.md
.tmux/plugins/tpm/bin/clean_plugins
.tmux/plugins/tpm/bin/install_plugins
.tmux/plugins/tpm/bin/update_plugins
搜索指定扩展名的文件
❯ fd -H -e md
.tmux/README.md
.tmux/plugins/tmux-continuum/CHANGELOG.md
.tmux/plugins/tmux-continuum/CONTRIBUTING.md
.tmux/plugins/tmux-continuum/LICENSE.md
.tmux/plugins/tmux-continuum/README.md
在当前目录下搜索文件名包含 reademe 且扩展名为 md 的文件
❯ fd -H -e md readme
.tmux/README.md
.tmux/plugins/tmux-continuum/README.md
.tmux/plugins/tmux-continuum/scripts/handle_tmux_automatic_start/README.md
.tmux/plugins/tmux-logging/README.md
.tmux/plugins/tmux-resurrect/README.md
fzf命令
简介
fzf是目前最快的fuzzy finder。使用golang编写。结合其他工具(比如ag和fasd)可以完成非常多的工作。
环境变量
如下表所示:
name | description | example |
---|---|---|
FZF_DEFAULT_COMMAND |
输入为 tty 时的默认命令 | export FZF_DEFAULT_COMMAND='fd --type f' |
FZF_DEFAULT_OPTS |
设置默认选项 | export FZF_DEFAULT_OPTS="--layout=reverse --inline-info" |
FZF_CTRL_T_COMMAND |
按键映射<CTRL-T> 行为设置 |
|
FZF_CTRL_T_OPTS |
按键映射<CTRL-T> 选项设置 |
|
FZF_CTRL_R_OPTS |
按键映射<CTRL-R> 选项设置 |
|
FZF_ALT_C_COMMAND |
按键映射<CTRL-C> 行为设置 |
|
FZF_ALT_C_OPTS |
按键映射<CTRL-C> 选项设置 |
- 界面:fzf 默认会以全屏方式显示交互界面,可以使用
--height
选项设置交互界面高度:
# 使用 rg 进行搜索 export FZF_DEFAULT_COMMAND='rg --files --hidden'
使用
常用快捷键:
- Ctrl-j Ctrl-n 都能往下,不过 Ctrl-j 在我的配置中是切换到下 pane 所以我只用 Ctrl-n
- Ctrl-k Ctrl-p 都能往上,不过 Ctrl-k 在我的配置中是切换到上 pane 所以我只用 Ctrl-p
- Ctrl-c 或者 Ctrl-g 或者 Ctrl-q 或者 Esc 用来退出 abort
- Ctrl-h 退格键 backspace,不过这个键和 tmux vim 有冲突所以一般不用
- Ctrl-a 光标跳转到开头 Ctrl-e 跳转到行结尾
- Ctrl-w 向前删以 word
- Ctrl-u 删除所有输入
常用操作
历史记录搜索
终端命令行下按下 Ctrl-r
会列出 history
命令目录,选中 Enter
离开 fzf
后,该条目会拷贝到命令行中。
搜索当前文件夹
在命令行中按下 Ctrl-t
会打开 fzf
窗口,此时如果找到某文件,并选择 Enter
,那么该文件名会被拷贝到命令行中。
假如在 fzf
选择窗口中想要选择多个文件,那么可以使用 tab
来进行多选,使用 Ctrl-n,
Ctrl-p
上下切换的时候,可以使用 Tab
来选中期望的文件进行多选操作。
如果想同时预览文件内容,可以使用--preview
选项
export FZF_CTRL_T_OPTS="--preview '(highlight -O ansi -l {} 2> /dev/null || cat {} || tree -C {}) 2> /dev/null | head -200'"
列出文件夹目录,并自动进入
在命令行上按下Alt-c
, 会列出当前文件夹下的目录,选中条目会自动进入到相应目录
预览窗口
如果使用--preview选项, fzf会自动用外部程序打开现在条目的文件, {}会被fzf选中行内容代替
fzf --preview 'cat {}'
建议安装bat, 是一个Rust编写的独立程序
也可以安装rougify(先安装ruby, 然后gem intall rouge
)
Bat: https://github.com/sharkdp/bat
Highlight: http://www.andre-simon.de/dok...
CodeRay: http://coderay.rubychan.de/
Rouge: https://github.com/jneen/rouge
然后在.zshrc里用函数或别名
fzfp() {
fzf --preview '[[ $(file --mime {}) =~ binary ]] && echo {} is a binary file || (bat --style=numbers --color=always{} || rougify {} || highlight -O ansi -l {} || coderay {} || cat {}) 2> /dev/null | head -500'
}
alias tt='fzf --preview '"'"'[[ $(file --mime {}) =~ binary ]] && echo {} is a binary file || (bat --style=numbers --color=always{} || rougify {} || highlight -O ansi -l {} || coderay {} || cat {}) 2> /dev/null | head -500'"'"
#文件查找
alias fzf.w="fzf --height 40% --layout reverse --info inline --border
--preview 'file {}' --preview-window down:1:noborder
--color 'fg:#bbccdd,fg+:#ddeeff,bg:#334455,preview-bg:#223344,border:#778899'"
#文件预览
alias fzf.p="fzf --preview 'bat --style=numbers --color=always --line-range :500 {}'"
alias f="fzf.p"
#Git 分支查找/Git Commit 查找
_fzf_gco() {
git branch | fzf | sed -e "s/* //g" | xargs -I {} git checkout {}
}
_fzf_gcs() {
git log --oneline | fzf | grep -o -E "^[0-9a-z]+" | xargs -I {} git show {}
}