前言

fasd是一个命令行加速工具。它提供了对文件和文件夹的快速访问。它和autojmp, z, v都很相近。它会记录你访问过的文件夹和文件, 然后你就可以通过简短的名字来直接访问它们。
fasd会对访问过的文件和文件夹按照使用频率排序,然后按照频率列出所有文件和文件夹

安装

git clone https://github.com/clvv/fasd.git
cd fasd
make install

然后把下面语句放到你的.bashrc或.zshrc下

eval "$(fasd --init auto)"

命令

fasd [options] [query ...]
[f|a|s|d|z] [opions] [query ...]
  options:
    -s        list paths with scores
    -l        list paths without scores
    -i        interactive mode
    -e <cmd>  set command to execute on the result file
    -b <name>  only use <name> backend
    -B <name>  add additional backend <name>
    -a        match files and directories
    -d        match directories only
    -f        match files only
    -r        match by rank only
    -t        match by recent access only
    -R        reverse listing order
    -h        show a brief help message
    -[0-9]    select the nth entry

fasd [-A|-D] [paths ...]
    -A    add paths
    -D    delete paths

比如输入fasd -R的返回结果是

$ fasd -R
75.3984    /home/harriszh/dw/dev/dw_fp_mult/src
63.423    /home/harriszh/dw/work_version/sim_ver.2015
44.8636    /home/harriszh/avip/axi3_master_tlm_slave_tlm
43.8288    /home/harriszh/.fzf
37.4402    /home/harriszh/.zshrc
35.572    /home/harriszh/dw/dev/dw_fp_mult
26.0366    /home/harriszh/.fzf/shell
25.6842    /home/harriszh/.vim/bundle
...

配置

ZSH:

# fasd
fasd_cache="$HOME/.fasd-init-zsh"
if [ "$(command -v fasd)" -nt "$fasd_cache" -o ! -s "$fasd_cache" ]; then
  fasd --init posix-alias zsh-hook zsh-ccomp zsh-ccomp-install >| "$fasd_cache"
fi
source "$fasd_cache"
unset fasd_cache

BASH:

fasd_cache="$HOME/.fasd-init-bash"
if [ "$(command -v fasd)" -nt "$fasd_cache" -o ! -s "$fasd_cache" ]; then
  fasd --init posix-alias bash-hook bash-ccomp bash-ccomp-install >| "$fasd_cache"
fi
source "$fasd_cache"
unset fasd_cache

aliases

带自以下aliases

alias a='fasd -a' # any
alias s='fasd -si' # show / search / select
alias d='fasd -d' # directory
alias f='fasd -f' # file
alias sd='fasd -sid' # interactive directory selection
alias sf='fasd -sif' # interactive file selection
alias z='fasd_cd -d' # cd, same functionality as j in autojump
alias zz='fasd_cd -d -i' # cd with interactive selection
建议把z和zz注释掉, 因为后面会用fzf+fasd来实现

使用

使用如下:

# list recent files matching foo
f foo
# list recent files and directories matching foo and bar             
a foo bar  
# list recent files that ends in js    
f js$ 
# run vim on the most frecent file matching foo              
f -e vim foo  
# run mplayer on the most frecent file matching bar     
mplayer `f bar`
# cd into the most frecent directory matching foo    
z foo
# interact               
open `sf pdf`  

问题

在zsh里配合fzf使用时经常会出现这个错误

fasd_cd:1: maximum nested function level reached

这时应该检查一下fasd有没有被其它脚本alias

后言

fasd单独使用也非常强大,但配合fzf会再强大,所以fasd只是三剑客之一,另外两剑客是riggrep和fzf.


harriszh
338 声望131 粉丝

做些有趣的事,留些有用的存在