前面在介绍zsh的时候,说过它的补全用来起比bash的Tab补全方便多了,在有多个备选项是你只要用光标键来挑选就是了,而不是全列出来提示你再多输入几个字符。而Emacs的anything / helm 则更近一步,首先就把备选项列出来,随着你的输入减少备选项,少到一定程度你就可以用眼睛浏览并进行选择了。

说起来有点费劲,看一下peco的这个演示图就明白了:

最近看到几个命令行上的这种工具,可以让我们在bash或者vim里面也用上这种机制(至于具体用来干什么,就看自己的小宇宙了)

name homepage language github stars pros cons comment <
fzf https://github.com/junegunn/fzf go/ruby 3696 vim, tmux, bash/zsh support A command-line fuzzy finder written in Go \n旧版本采用ruby编写,安装时对于没有提供二进制包的平台,会安装这个ruby版本的
peco https://github.com/peco/peco go 2793 arm/windows binary 设计上尽力模仿了percol
PathPicker https://github.com/facebook/PathPicker python 2718 PathPicker accepts a wide range of input -- output from git commands, grep results, searches --
percol https://github.com/mooz/percol python 1938 拼音 adds flavor of interactive filtering to the traditional pipe concept of UNIX shell
selecta https://github.com/garybernhardt/selecta/ ruby 1000 vim A fuzzy text selector for files and anything else you need to select. Use it from vim, from the command line, or anywhere you can run a shell command.
pick https://github.com/thoughtbot/pick c 349 vim; 已经进入Debian 9 https://robots.thoughtbot.com/announcing-pick
zsh-zaw https://github.com/zsh-users/zaw zsh 289 很多预配置sources zsh anything.el-like widget.
canything https://github.com/keiji0/canything c 23

参见: fuzzy matchers overview? - commandline

我目前在用的是 fzfpercol/peco 。对于zsh-zaw也用过一阵,但总觉得有点过于机巧,并且还得需要zsh。

fzf

https://github.com/junegunn/fzf

之所以用它主要是因为它直接提供了几个使用场景(见下面的描述),而percol/selecta这些只是提供了一个“挑选”的机制(按Emacs的举例而言,就是percol这些只提供了 anything.el 而没有提供 anything-config.el )。另外,虽然fzf并没有为树莓派提供预编译的版本(我也还不知道怎么自己装golang环境来编译),但它还有一个ruby版本,使用起来差别不大。

fzf 预提供的两个功能:

• 自己输入 fzf /home/johndoe 来查找文件

• 利用它与bash/zsh的集成,来补全命令参数。跟bash的集成方法是 source fzf-0.10/shell/completion.sh && source fzf-0.10/shell/key-binding.sh ,然后就可以使用了:输入vim **<tab> 它就会调fzf列出当前目录所有文件让你选,输入ssh **<tab>它就列出~/.ssh/config里面的所有主机给你选

另外fzf提供了一个跟tmux配合的脚本(fzf-tmux),用它来挑备选项的话,它会检测当前是否在tmux里面,如果是的话就用tmux临时开一个面板来让你跟它交互。

peco/percol

这两个的功能基本上一致,都是列出一排备选项供用户挑,至于拿挑出来的结果干什么,则完全是用户自己来想,比如 vim $(locate -b '*.org' | fzf)

peco基本上是安装percol的设计来实现的,区别是percol是python编写的,peco是用go,结果是后者只需要单个可执行文件即可工作,并且性能好得多。

percol/peco的功能其实fzf 也支持(比如 vim $(locate -b '*.org' | fzf) 这种场景,但在fzf之余还用percol/peco的原因是:

• fzf 对非ansi字符支持得不好,会乱码,而peco和percol都支持utf-8
• percol 支持按拼音首字母匹配(比如输入bj会匹配出带有“编辑”、“比较”、“悲剧”、“北京”、“背景”的行。需要先pip install pinyin然后用percol --match-method=pinyin。我贡献的补丁,不过commit message里面错把pinyin写成pinin了)。
• 如果备选项很多(比如我想搜索博客园闪存的离线文件,目前有4000行左右),ruby版本的fzf 和 python写的percol 有性能上的问题,那就用peco好了(peco还提供了一个armv7的预编译版本,可以在树莓派上用)

命令行上的narrowing(随着输入逐步减少备选项)工具相关推荐

  1. ubuntu 命令行 上的一些常见的快捷键和命令;无法输入字符等

    1. 如何清空命令行上的所有的输出(清屏): clear 2. 获得上一次输入的命令: 按键盘上的方向键 "向上" 就可以了 按一次向上键意味着是那个一条命令,按两次向上方向键意味 ...

  2. 如何用git命令行上传本地代码到github

    如何用git命令行上传本地代码到github 2016年09月19日 16:10:36 阅读数:9337 注意:安装的前提条件是配置好git的相关环境或者安装好git.exe,此处不再重点提及 上传的 ...

  3. eclipse导入jar包_在命令行上操作JAR,WAR和EAR

    eclipse导入jar包 尽管Java IDE和许多图形工具使查看和操作Java归档文件(JAR,WAR和EAR)文件的内容比以往更加容易,但有时我还是更喜欢使用命令行jar命令来完成这些任务. 当 ...

  4. jar 、war、ear_在命令行上操作JAR,WAR和EAR

    jar .war.ear 尽管Java IDE和许多图形工具使查看和操作Java归档文件(JAR,WAR和EAR)文件的内容比以往更加容易,但有时我还是更喜欢使用命令行jar命令来完成这些任务. 当我 ...

  5. 在命令行上操作JAR,WAR和EAR

    尽管Java IDE和许多图形工具使查看和操作Java归档文件(JAR,WAR和EAR)文件的内容比以往更加容易,但有时我还是更喜欢使用命令行jar命令来完成这些任务. 当我必须重复做某事或作为脚本的 ...

  6. aspell_如何使用Aspell在Linux命令行上检查拼写

    aspell 如今,正确的拼写对许多人来说似乎并不重要. 但是,对于我们当中的某些人来说,它是对的. 是的, 我的那些人之一. 虽然我不是拼写警察,但是当我遇到拼写错误的单词时,仍然会出现这些单词. ...

  7. linux 装nano命令,vim、nano在命令行上如何编辑文件

    此次教程中,我们将向您展示三种命令行编辑文件的方式.本文一共覆盖了三种命令行编辑器,vi(或 vim).nano 和 emacs. 在命令行上使用 Vi 或 Vim 编辑文件 您可以使用 vi 编辑文 ...

  8. 虚拟机安装之用户在命令行上发出了EULAS AGREED=1,表示不接受许可协议(虚拟机卸载残留)

    用户在命令行上发出了EULAS AGREED=1,表示不接受许可协议(虚拟机卸载残留) 因为我根据网上的教程来操作的,经常没成功,所以过程我没截图,以下部分截图来源于我采取的别的博主的图片,原文链接如 ...

  9. 用户在命令行上发出了EULAS AGREED=1,表示不接受许可协议(虚拟机卸载残留)

    文章目录 前言 一.kali虚拟机安装 二.用户在命令行上发出了EULAS AGREED=1,表示不接受许可协议 1.解决方案一 2.解决方案二 3.不支持降级安装 前言 身为网安人员,手上怎么能没有 ...

最新文章

  1. Spring-MVC入门(一):入门实例
  2. 转载:static的初始化顺序
  3. Java 删除ArrayList中重复元素,保持顺序
  4. 1015.利用QxOrm库操作数据库示例代码
  5. 33.卷1(套接字联网API)---调试技术
  6. 我的Verilog HDL学习历程(二) 组合逻辑电路的一个实例:基于EGO1板子
  7. 市盈率、市净率、净资产收益率股息率介绍
  8. 【漏洞】——心脏滴血(CVE-2014-0160)
  9. 山型组合数c语言,(人教版)高中数学选修2-3课件:组合与组合数公式自主学习...
  10. 地图可视化 - 气泡点图
  11. 流行和声(2)Major6和弦
  12. 电脑重装系统简单小白教程
  13. 计算机基础与office应用考试专题,一级考试计算机基础及WPS Office应用模拟题
  14. 麦克林排名计算机,转需!2021年加拿大麦克林杂志排名大学院校推荐
  15. [ASP.NET网站开发] web程序设计,期末作业,问卷填写与学生选课管理系统(超简单,容易懂!课程考核必过)(使用内置数据库)
  16. VCS命令详解(二):仿真命令
  17. qDebug()用法
  18. (JAVA)面向对象编程(基础部分)
  19. 应广单片机PMS152
  20. 使用Django1.7开发熙鱿记官网

热门文章

  1. 正则表达式替换和不包含指定字符串
  2. 设计: ListView 接口,and the missing read-only interfaces in java collection framework
  3. DataBinder.Eval数据绑定中的使用
  4. 诗与远方:无题(六十八)
  5. JAVA设计模式 - 创建型模式总结
  6. 关于Java静态属性初始化
  7. git常用操作命令大全
  8. centos中bash占用cpu,Linux中显示内存和CPU使用率最高的进程和SHELL脚本例子
  9. winsock使用java编写_利用Socket进行Java网络编程(一)
  10. csgo 机器人模式_分享一个休闲模式机器人Bug