终端下快速找文件、进目录

2015.02.26
SF-Zhou

如果你经常是在终端下完成工作,那么必然会经常切换目录,或者查找一些文件。如果频繁地使用 cd 命令,无疑很浪费时间。

搜索这个问题,找到了一个非常好的开源工具:fasd

fasd 通过记录用户经常使用的目录,给每个目录分配一定的权重,频繁访问的目录权重越大。而当你使用 fasd 模糊查找一个目录时,它会查询符合条件的权重最大的目录。

安装和配置

Mac 下可以直接通过 Homebrew 安装:

brew install fasd

安装完成后可以按照官方的配置,在 bashrc/zshrc 里加入如下的代码:

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

比如 Mac 的话,可以在 ~/.bash_profile 里加入上面的代码。

添加完成后,记得重启终端,或者执行:

source ~/.bash_profile

使用

比如,我的博客代码在 ~/Work/sf-zhou.github.io/ 目录,我们可以这样训练 fasd:

cd ~
cd Work
cd sf-zhou.github.io

以后,如果我们希望快速地跳到该目录,可以直接执行:

z sf-zhou

你也可以通过执行:

d sf-zhou

来查看与 sf-zhou 相关目录的权重。

我们可以将 fasd 和其他命令联合在一起使用:

mv . `d docu`

上面的命令可以将当前文件夹所有的文件移动到 Documents 文件夹。终端里 `` 中的命令会先执行,并且将结果替换到原命令中。

我经常使用的命令还有:

vim `f a.cpp`

对于上面的操作,我们也可以这样:

f -e vim a.cpp

所以,我们可以把 f -e vim 加到 bashrc 文件里……

alias v='f -e vim' # quick opening files with vim

配合 Zsh & oh-my-zsh

Zsh,这里的 z 表示终极。换句人话,只要你对效率有追求,最后总是会换到 Zsh 的(当然,现在选择更多了,比如 fish)。

oh-my-zsh,简单的一句话,“Your terminal never felt this good before”。

配合 Zsh 和 oh-my-zsh,fasd 会更好用。

首先,安装 zsh:

brew install zsh

另外,建议安装 Zsh 的另一个工具是 zsh-syntax-highlighting,也可以通过 brew 安装。使用 brew search zsh,可以找到更多好用的工具。

安装 oh-my-zsh,在官网上找到安装命令:

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

因为走 GitHub,所以连接不畅的,请注意科学上网。

全部安装好后,使用命令:

chsh -s /bin/zsh

将自己的默认终端切换为 Zsh。注意不加 sudo,执行该命令后会要求输入密码的。

OK,安装完 Zsh 和 oh-my-zsh 后终端就变得很好用了。可以再看看网上的一些配置,让自己的终端更好用。

配置 fasd。编辑 ~/.zshrc,加入:

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

这几句脚本,首先会检查是否存在 fasd_cache 文件,没有的话就会使用命令创建,fasd --init posix-alias bash-hook bash-ccomp bash-ccomp-install 后面的参数就表示使用到的功能,默认其实也够了。如果存在就直接加载这个文件。然后,之前提过的功能还是都在的,另外多了一些更神奇的东西,例如:

mv d,box[这里敲 Tab]

会自动展开到:

mv /Users/sfzhou/Dropbox

继续敲这个命令,可以使用同样的方法。在输入过程中,f, 表示文件,d, 表示目录,Tab 展开,所见即所得。有多个候选的时候还可以按 Tab 选择:

熟练使用,行云流水。

End

总之,熟练使用该工具可以让你节约很多时间,享受美好的人生。