来2个日常使用命令行工具玩一玩,前一个是目录快速跳转,后一个是使用curses模糊查找

fasd

目录快速跳转工具挺多的autojump,z.我最开始用的是z,用长了感觉好像有bug,然后就换fasd.好像感觉好用那么一点点。这种工具原理都差不多。对你的历史输入进行统计,放入数据库。然后根据你输入的结果从数据库匹配达到快速cd的结果。安装好后直接输入fasd,就可以看到得分以及目录/文件。从它的原理也能可以看出来。它只能对有记录的快速切换(从你安装这个软件开始记录)。对于一个新的目录首次访问还是需要用cd。这个软件个常用的命令也就2个
z和v,分别代表切换目录和使用$EDITOR打开文件.所以:

  • 当你需要快速cd到以前打开过的目录用z,当你首次打开一个目录用cd(或者打开当前目录);
  • 当你需要用vim打开以前打开的文件用v,首次打开或确定目录vim
  • 它真的很方便了,我看到有些人把它和fzf合起来一起用。我想了很久,除了装逼降低效率。我没想到有什么用

fzf

这款软件对于提高命令行效率也是很牛逼,而且看github上面的提交记录,依旧非常活跃(对于一个小白没什么比项目的活跃更重要了,因为它意味着你可能遇到的坑前人都可能已经趟过).而且这个项目的作者好像非常自信,项目说明里面居然只列举了优点,丝毫没有缺点.

这是一款安装上去就能让你眼前一亮的软件。比如Ctrl+R,完美替换了shell默认的历史记录功能,当输入指令的时候使用ctrl+T就能列出当前目录下所有的文件。当然这只是列举的2个最常用的功能,实际上,它的潜力远不止这么点,如果你用过osx上被人吹成神的alfred,那么fzf的概念可能和它有一定的相似性(取得一些结果,然后使用列表排除出来),举个例子,IDE中我们经常使用全局替换,用以下命令也能搞定
grep -rn 'python'| fzf -m | awk -F ':' '{print $1}' | xargs -L 1 sed -i -e 's/python/hello/g'
效果如下fzf_grep_sed
解释一下,

  1. 使用grep递归匹配当前目录含有python的文件,-r为递归,-n为显示行号。
  2. 使用fzf显示出来,-m为多行模式,使用tab为选择或者取消选择。
  3. 使用awk对选择的的结果进行处理,-F为选择分隔符,结果为多个目录
  4. 使用xargs对结果执行sed替换,-L为对每一个非空行执行后续命令(Call utility for every number non-empty lines read. A line ending with a space continues to the next non-empty line)
  5. 另外grep的效率是非常高的,如果你直接用sed进行全局替换-_-文件一多还是很花费时间滴,比如这种sed -i -- 's/foo/bar/g' **/*(D.)

缺点

虽然作者没有列举出来,我还是就我的个人感觉说一下

  1. 蠢到家的匹配效果,你很难理解它是根据什么给你匹配的,放一张图fzf_match,就这匪夷所思的匹配,你不得不使用^$!等额外的规则或者多输入一些字符然后上下键选择
  2. 看着炫酷,有时候没必要那么炫酷,比如使用z的时候tab如果有多个选择,这个时候如果你用fzf替代,他会使用curses全屏让你选择,其实整个过程已经多输入了好多字符.

总结

fasd和fzf的很好用,而且它们都不需要任何配置都能让你感到高效!对于fzf如果你花时间配置是有特别多玩法的,可以参照官网fzf_examplesgotbletu的视频教程体验它的强大。另外,如果你喜欢这2个软件,那么你一定会喜欢zsh-autosuggestions试一试吧~~