导读

让我们来看几个精心设计的 CLI 程序,以及如何解决一些可发现性问题。在 GUI 应用程序中,菜单、工具提示和图标用于向用户展示功能。而命令行缺乏这种能力,但是有办法克服这个问题。在深入解决方案之前,我会来看看几个有问题的 CLI 程序。在本文中,我会指出命令行界面的可发现性缺点以及克服这些问题的几种方法。

让我们来看几个精心设计的 CLI 程序,以及如何解决一些可发现性问题。在本文中,我会指出命令行界面的可发现性缺点以及克服这些问题的几种方法。

我喜欢命令行。我第一次接触命令行是在 1997 的 DOS 6.2 上。我学习了各种命令的语法,并展示了如何在目录中列出隐藏的文件(attrib)。我会每次仔细检查命令中的每个字符。 当我犯了一个错误,我会从头开始重新输入命令。直到有一天,有人向我展示了如何使用向上和向下箭头按键遍历命令行历史,我被震惊了。

后来当我接触到 Linux 时,让我感到惊喜的是,上下箭头保留了它们遍历历史记录的能力。我仍然很仔细地打字,但是现在,我了解如何盲打,并且我能打的很快,每分钟可以达到 55 个单词的速度。接着有人向我展示了 tab 补完,再一次改变了我的生活。

在 GUI 应用程序中,菜单、工具提示和图标用于向用户展示功能。而命令行缺乏这种能力,但是有办法克服这个问题。在深入解决方案之前,我会来看看几个有问题的 CLI 程序:

1、 MySQL

首先让我们看看我们所钟爱的 MySQL REPL。我经常发现自己在输入SELECT * FROM然后按Tab的习惯。MySQL 会询问我是否想看到所有的 871 种可能性。我的数据库中绝对没有 871 张表。如果我选择yes,它会显示一堆 SQL 关键字、表、函数等。(LCTT 译注:REPL —— Read-Eval-Print Loop,交互式开发环境)

2、 Python

我们来看另一个例子,标准的 Python REPL。我开始输入命令,然后习惯按Tab键。瞧,插入了一个Tab字符,考虑到Tab在 Python 源代码中没有特定作用,这是一个问题。

好的用户体验

让我看下设计良好的 CLI 程序以及它们是如何克服这些可发现性问题的。

自动补全: bpython

Bpython 是对 Python REPL 的一个很好的替代。当我运行 bpython 并开始输入时,建议会立即出现。我没用通过特殊的键盘绑定触发它,甚至没有按下Tab键。

当我出于习惯按下Tab键时,它会用列表中的第一个建议补全。这是给 CLI 设计带来可发现性性的一个很好的例子。

bpython 的另一个方面是可以展示模块和函数的文档。当我输入一个函数的名字时,它会显示这个函数附带的签名以及文档字符串。这是一个多么令人难以置信的周到设计啊。

上下文感知补全:mycli

mycli 是默认的 MySQL 客户端的现代替代品。这个工具对 MySQL 来说就像 bpython 之于标准 Python REPL 一样。mycli 将在你输入时自动补全关键字、表名、列和函数。

补全建议是上下文相关的。例如,在SELECT * FROM之后,只有来自当前数据库的表才会列出,而不是所有可能的关键字。

模糊搜索和在线帮助: pgcli

如果您正在寻找 PostgreSQL 版本的 mycli,请看看 pgcli。 与 mycli 一样,它提供了上下文感知的自动补全。菜单中的项目使用模糊搜索缩小范围。模糊搜索允许用户输入整体字符串中的任意子字符串来尝试找到正确的匹配项。

pgcli 和 mycli 在其 CLI 中都实现了这个功能。斜杠命令的文档也作为补全菜单的一部分展示。

可发现性: fish

在传统的 Unix shell(Bash、zsh 等)中,有一种搜索历史记录的方法。此搜索模式由Ctrl-R触发。当再次调用你上周运行过的命令时,例如 ssh或 docker,这是一个令人难以置信的有用的工具。 一旦你知道这个功能,你会发现自己经常会使用它。

如果这个功能是如此有用,那为什么不每次都搜索呢?这正是 fish shell 所做的。一旦你开始输入命令,fish 将开始建议与历史记录类似的命令。然后,你可以按右箭头键接受该建议。

命令行规矩

我已经回顾了一些解决可发现性的问题的创新方法,但也有一些基本的命令行功能应该作为每个 REPL 所实现基础功能的一部分:

确保 REPL 有可通过箭头键调用的历史记录。确保会话之间的历史持续存在。

提供在编辑器中编辑命令的方法。不管你的补全是多么棒,有时用户只需要一个编辑器来制作完美的命令来删除生产环境中所有的表。

使用分页器(pager)来管道输出。不要让用户滚动他们的终端。哦,要为分页器设置个合理的默认值。(记得添加选项来处理颜色代码。)

提供一种通过Ctrl-R界面或者 fish 式的自动搜索来搜索历史记录的方法。

总结

在第 2 节中,我将来看看 Python 中使你能够实现这些技术的特定库。同时,请查看其中一些精心设计的命令行应用程序:

bpython或 ptpython:具有自动补全支持的 Python REPL。

http-prompt:交互式 HTTP 客户端。

mycli:MySQL、MariaDB 和 Percona 的命令行界面,具有自动补全和语法高亮。

pgcli:具有自动补全和语法高亮,是对 psql 的替代工具。

wharfee:用于管理 Docker 容器的 shell。

了解更多: Amjith Ramanujam 在 5 月 20 日在波特兰俄勒冈州举办的 PyCon US 2017 上的谈话“神奇的命令行工具”。

本文由 LCTT 原创编译,Linux中国 荣誉推出

linux命令行python_干货:4 个绝佳的命令行终端程序相关推荐

  1. linux下运行python_在Linux命令行终端中使用python的简单方法(推荐)

    Linux终端中的操作均是使用命令行来进行的.因此,对于小白来说,熟记几个基本的命令行和使用方法能够较快的在Linux命令行环境中将python用起来. 打开命令行窗口 打开命令行窗口的快捷键如下: ...

  2. sudo dpkg 找不到命令_【干货】Linux中实用但很小众的11个炫酷终端命令

    关注我,你的眼睛会怀孕 今天给大家分享Linux总结出来的11个炫酷的Linux终端命令大全,通过今天这篇文章将向大家展示一系列的Linux命令.工具和技巧,我希望一开始就有人告诉我这些,而不是曾在我 ...

  3. LINUX下用CTRL+R快速搜索HISTORY历史命令,快速索引到之前使用过的命令行语句

    LINUX下用CTRL+R快速搜索HISTORY历史命令,快速索引到之前使用过的命令行语句 前提是,搜索已经使用的命令,否则是查不出来结果的. ctrl+r 用途:反向搜索执行过的命令.(revers ...

  4. linux 上使用wc -l命令快速查看文件内容有多少行,以及如何匹配指定字符查看多少行

    1 linux的cat -n命令查看文件内容一共有多少行 1.cat -n命令查看文件多少行 cat -n filename 如:cat -n gallery_color_depth.txt - 2. ...

  5. linux shell中的命令自动补全(compgen complete)与 命令行参数解析

    linux shell中的命令自动补全(compgen complete)与 命令行参数解析 标签: shell脚本 2013-12-31 21:56 6661人阅读 评论(6) 收藏 举报 分类: ...

  6. Linux 下从命令行打开pdf文件和html文件的命令

    Linux 下从命令行打开pdf文件和html文件的命令 [日期:2012-06-18] 来源:Linux社区 作者:hipercomer [字体:大 中 小] 如果你经常工作在Linux终端下,某个 ...

  7. 树莓派linux系统识别u盘启动,树莓派Raspberry Pi实战之命令行下实现USB存储设备自动挂载...

    简单介绍实现命令行下USB存储设备自动挂载的方法,Linux gnome/kde窗口环境下有移动存储的管理程序,可以实现自动挂载移动存储设备,但是在命令行下 通常需要用mount命令手动挂载USB存储 ...

  8. linux 获取命令行返回的数据_Linux | 活用CLI命令行进行数据处理与探索

    COMMAND LINE INTERFACE CLI即COMMAND LINE INTERFACE命令行模式,是在图形界面得到普及之前使用最为广泛的用户界面,也就是咱们平时看到的黑乎乎背景与绿油油文字 ...

  9. linux vi 删除行命令,在Vim/Vi中删除行、多行、行范围、所有行及包含模式的行

    本文介绍如何在Vim/Vi中删除行,操作系统为Linux.Vim或其早期版本Vi预装在大多数Linux发行版和macOS中,如果您是系统管理员或只是普通的Linux用户,了解Vim的基础很重要,通常, ...

最新文章

  1. 实体嵌入Entity Embedding及代码实现
  2. string.Format 方法拼入{}
  3. 结构体对齐,#pragma pack
  4. 谷歌浏览器使用IE内核
  5. 【Blog.Core重要升级】:封装服务扩展层
  6. TIBCO产品的微服务和DevOps
  7. 2018-2019 20165203 《信息安全系统设计基础》第一周学习总结
  8. linux内核怎么修改屏幕旋转方向_运维必备:常见的Linux系统故障及其排查的方法...
  9. 《网管员必读》系列丛书试读连载
  10. chrome 下载东西 失败禁止_chrome谷歌浏览器下载文件失败如何解决
  11. Python下载和安装图文教程[超详细]
  12. T1089 三人行必有我师
  13. 什么是CSR证书申请文件?
  14. 2017网易笔试矩阵快速幂
  15. DB2 使用REORG命令重组优化表和索引
  16. 跳过数据准备,下秒数据让飞书维格表数据应用更高效
  17. 【Java 8系列】Java开发者的判空利器 -- Optional
  18. 学习汇编语言Day05-Cheat Enginee(CE)使用指南
  19. 在web代理中对于大的POST数据使用 REQUEST_CONTENT
  20. 计算机毕业设计springboot基于vue众筹平台系统 aj3l6源码+系统+程序+lw文档+部署

热门文章

  1. matlab教程 for循环,Matlab for循环使用操作教程分享
  2. 贝拉博客,一个屌丝网站
  3. 骑行318、 2016.7.29
  4. 文件扫描-TWAIN,WIA,ISIS,SANE
  5. 【疫情分析--数据采集】
  6. Rocksdb Compaction 源码详解(一):SST文件详细格式源码解析
  7. Keras Conv1d 参数及输入输出详解
  8. 采用CCG和kkt条件编制两阶段鲁棒优化程序,以储能、发电、风电和光伏容量作为第一阶段变量
  9. 3-regexp-golang 爬虫基础正则的使用
  10. 【爬虫专栏18】多线程爬笔趣阁遮天