命令行上的narrowing(随着输入逐步减少备选项)工具
前面在介绍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
我目前在用的是 fzf
和 percol
/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(随着输入逐步减少备选项)工具相关推荐
- ubuntu 命令行 上的一些常见的快捷键和命令;无法输入字符等
1. 如何清空命令行上的所有的输出(清屏): clear 2. 获得上一次输入的命令: 按键盘上的方向键 "向上" 就可以了 按一次向上键意味着是那个一条命令,按两次向上方向键意味 ...
- 如何用git命令行上传本地代码到github
如何用git命令行上传本地代码到github 2016年09月19日 16:10:36 阅读数:9337 注意:安装的前提条件是配置好git的相关环境或者安装好git.exe,此处不再重点提及 上传的 ...
- eclipse导入jar包_在命令行上操作JAR,WAR和EAR
eclipse导入jar包 尽管Java IDE和许多图形工具使查看和操作Java归档文件(JAR,WAR和EAR)文件的内容比以往更加容易,但有时我还是更喜欢使用命令行jar命令来完成这些任务. 当 ...
- jar 、war、ear_在命令行上操作JAR,WAR和EAR
jar .war.ear 尽管Java IDE和许多图形工具使查看和操作Java归档文件(JAR,WAR和EAR)文件的内容比以往更加容易,但有时我还是更喜欢使用命令行jar命令来完成这些任务. 当我 ...
- 在命令行上操作JAR,WAR和EAR
尽管Java IDE和许多图形工具使查看和操作Java归档文件(JAR,WAR和EAR)文件的内容比以往更加容易,但有时我还是更喜欢使用命令行jar命令来完成这些任务. 当我必须重复做某事或作为脚本的 ...
- aspell_如何使用Aspell在Linux命令行上检查拼写
aspell 如今,正确的拼写对许多人来说似乎并不重要. 但是,对于我们当中的某些人来说,它是对的. 是的, 我的那些人之一. 虽然我不是拼写警察,但是当我遇到拼写错误的单词时,仍然会出现这些单词. ...
- linux 装nano命令,vim、nano在命令行上如何编辑文件
此次教程中,我们将向您展示三种命令行编辑文件的方式.本文一共覆盖了三种命令行编辑器,vi(或 vim).nano 和 emacs. 在命令行上使用 Vi 或 Vim 编辑文件 您可以使用 vi 编辑文 ...
- 虚拟机安装之用户在命令行上发出了EULAS AGREED=1,表示不接受许可协议(虚拟机卸载残留)
用户在命令行上发出了EULAS AGREED=1,表示不接受许可协议(虚拟机卸载残留) 因为我根据网上的教程来操作的,经常没成功,所以过程我没截图,以下部分截图来源于我采取的别的博主的图片,原文链接如 ...
- 用户在命令行上发出了EULAS AGREED=1,表示不接受许可协议(虚拟机卸载残留)
文章目录 前言 一.kali虚拟机安装 二.用户在命令行上发出了EULAS AGREED=1,表示不接受许可协议 1.解决方案一 2.解决方案二 3.不支持降级安装 前言 身为网安人员,手上怎么能没有 ...
最新文章
- Spring-MVC入门(一):入门实例
- 转载:static的初始化顺序
- Java 删除ArrayList中重复元素,保持顺序
- 1015.利用QxOrm库操作数据库示例代码
- 33.卷1(套接字联网API)---调试技术
- 我的Verilog HDL学习历程(二) 组合逻辑电路的一个实例:基于EGO1板子
- 市盈率、市净率、净资产收益率股息率介绍
- 【漏洞】——心脏滴血(CVE-2014-0160)
- 山型组合数c语言,(人教版)高中数学选修2-3课件:组合与组合数公式自主学习...
- 地图可视化 - 气泡点图
- 流行和声(2)Major6和弦
- 电脑重装系统简单小白教程
- 计算机基础与office应用考试专题,一级考试计算机基础及WPS Office应用模拟题
- 麦克林排名计算机,转需!2021年加拿大麦克林杂志排名大学院校推荐
- [ASP.NET网站开发] web程序设计,期末作业,问卷填写与学生选课管理系统(超简单,容易懂!课程考核必过)(使用内置数据库)
- VCS命令详解(二):仿真命令
- qDebug()用法
- (JAVA)面向对象编程(基础部分)
- 应广单片机PMS152
- 使用Django1.7开发熙鱿记官网
热门文章
- 正则表达式替换和不包含指定字符串
- 设计: ListView 接口,and the missing read-only interfaces in java collection framework
- DataBinder.Eval数据绑定中的使用
- 诗与远方:无题(六十八)
- JAVA设计模式 - 创建型模式总结
- 关于Java静态属性初始化
- git常用操作命令大全
- centos中bash占用cpu,Linux中显示内存和CPU使用率最高的进程和SHELL脚本例子
- winsock使用java编写_利用Socket进行Java网络编程(一)
- csgo 机器人模式_分享一个休闲模式机器人Bug