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 {}
}