Linux中國

4 個擁有絕佳命令行界面的終端程序

在本文中,我會指出命令行界面的 可發現性 discoverability 缺點以及克服這些問題的幾種方法。

我喜歡命令行。我第一次接觸命令行是在 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,互動式開發環境)

MySQL gif

2、 Python

我們來看另一個例子,標準的 Python REPL。我開始輸入命令,然後習慣按 Tab 鍵。瞧,插入了一個 Tab 字元,考慮到 Tab 在 Python 源代碼中沒有特定作用,這是一個問題。

![Python gif](/data/attachment/album/201705/20/120431ri5mxao1gz5ijg0a.gif "Python gif")

好的用戶體驗

讓我看下設計良好的 CLI 程序以及它們是如何克服這些可發現性問題的。

自動補全: bpython

Bpython 是對 Python REPL 的一個很好的替代。當我運行 bpython 並開始輸入時,建議會立即出現。我沒用通過特殊的鍵盤綁定觸發它,甚至沒有按下 Tab 鍵。

![bpython gif](/data/attachment/album/201705/20/120432prrm4dr1vodyofvs.gif "bpython gif")

當我出於習慣按下 Tab 鍵時,它會用列表中的第一個建議補全。這是給 CLI 設計帶來可發現性性的一個很好的例子。

bpython 的另一個方面是可以展示模塊和函數的文檔。當我輸入一個函數的名字時,它會顯示這個函數附帶的簽名以及文檔字元串。這是一個多麼令人難以置信的周到設計啊。

上下文感知補全:mycli

mycli 是默認的 MySQL 客戶端的現代替代品。這個工具對 MySQL 來說就像 bpython 之於標準 Python REPL 一樣。mycli 將在你輸入時自動補全關鍵字、表名、列和函數。

補全建議是上下文相關的。例如,在 SELECT * FROM 之後,只有來自當前資料庫的表才會列出,而不是所有可能的關鍵字。

![mycli gif](/data/attachment/album/201705/20/120433y0mqoq5xb4mfff0q.gif "mycli gif")

模糊搜索和在線幫助: pgcli

如果您正在尋找 PostgreSQL 版本的 mycli,請看看 pgcli。 與 mycli 一樣,它提供了上下文感知的自動補全。菜單中的項目使用模糊搜索縮小範圍。模糊搜索允許用戶輸入整體字元串中的任意子字元串來嘗試找到正確的匹配項。

![pgcli gif](/data/attachment/album/201705/20/120436qwvx5i04uhhi0aut.gif "pgcli gif")

pgcli 和 mycli 在其 CLI 中都實現了這個功能。斜杠命令的文檔也作為補全菜單的一部分展示。

可發現性: fish

在傳統的 Unix shell(Bash、zsh 等)中,有一種搜索歷史記錄的方法。此搜索模式由 Ctrl-R 觸發。當再次調用你上周運行過的命令時,例如 sshdocker,這是一個令人難以置信的有用的工具。 一旦你知道這個功能,你會發現自己經常會使用它。

如果這個功能是如此有用,那為什麼不每次都搜索呢?這正是 fish shell 所做的。一旦你開始輸入命令,fish 將開始建議與歷史記錄類似的命令。然後,你可以按右箭頭鍵接受該建議。

命令行規矩

我已經回顧了一些解決可發現性的問題的創新方法,但也有一些基本的命令行功能應該作為每個 REPL 所實現基礎功能的一部分:

  • 確保 REPL 有可通過箭頭鍵調用的歷史記錄。確保會話之間的歷史持續存在。
  • 提供在編輯器中編輯命令的方法。不管你的補全是多麼棒,有時用戶只需要一個編輯器來製作完美的命令來刪除生產環境中所有的表。
  • 使用分頁器(pager)來管道輸出。不要讓用戶滾動他們的終端。哦,要為分頁器設置個合理的默認值。(記得添加選項來處理顏色代碼。)
  • 提供一種通過 Ctrl-R 界面或者 fish 式的自動搜索來搜索歷史記錄的方法。

總結

在第 2 節中,我將來看看 Python 中使你能夠實現這些技術的特定庫。同時,請查看其中一些精心設計的命令行應用程序:

  • bpythonptpython:具有自動補全支持的 Python REPL。
  • http-prompt:互動式 HTTP 客戶端。
  • mycli:MySQL、MariaDB 和 Percona 的命令行界面,具有自動補全和語法高亮。
  • pgcli:具有自動補全和語法高亮,是對 psql 的替代工具。
  • wharfee:用於管理 Docker 容器的 shell。

了解更多: Amjith Ramanujam 在 5 月 20 日在波特蘭俄勒岡州舉辦的 PyCon US 2017 上的談話「神奇的命令行工具」。

作者簡介:

Amjith Ramanujam - Amjith Ramanujam 是 pgcli 和 mycli 的創始人。人們認為它們很酷,他表示笑納讚譽。他喜歡用 Python、Javascript 和 C 編程。他喜歡編寫簡單易懂的代碼,它們有時甚至會成功。

via: https://opensource.com/article/17/5/4-terminal-apps

作者:Amjith Ramanujam 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國