4 個擁有絕佳命令行界面的終端程序
pgcli 和 mycli 的作者為你介紹幾個精心設計的 CLI 程序,以及如何解決一些可發現性問題。 -- Amjith Ramanujam
本文導航
-好的用戶體驗 …… 29%
-自動補全: bpython …… 31%
-上下文感知補全:mycli …… 41%
-模糊搜索和在線幫助: pgcli …… 49%
-可發現性: fish …… 57%
-命令行規矩 …… 66%
-總結 …… 76%
編譯自: https://opensource.com/article/17/5/4-terminal-apps
作者: Amjith Ramanujam
譯者: geekpi
讓我們來看幾個精心設計的 CLI 程序,以及如何解決一些可發現性問題。
在本文中,我會指出命令行界面的可發現性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
好的用戶體驗
讓我看下設計良好的 CLI 程序以及它們是如何克服這些可發現性問題的。
自動補全: bpython
Bpython[1] 是對 Python REPL 的一個很好的替代。當我運行 bpython 並開始輸入時,建議會立即出現。我沒用通過特殊的鍵盤綁定觸發它,甚至沒有按下 Tab 鍵。
bpython gif
當我出於習慣按下 Tab 鍵時,它會用列表中的第一個建議補全。這是給 CLI 設計帶來可發現性性的一個很好的例子。
bpython 的另一個方面是可以展示模塊和函數的文檔。當我輸入一個函數的名字時,它會顯示這個函數附帶的簽名以及文檔字元串。這是一個多麼令人難以置信的周到設計啊。
上下文感知補全:mycli
mycli[2] 是默認的 MySQL 客戶端的現代替代品。這個工具對 MySQL 來說就像 bpython 之於標準 Python REPL 一樣。mycli 將在你輸入時自動補全關鍵字、表名、列和函數。
補全建議是上下文相關的。例如,在 SELECT * FROM 之後,只有來自當前資料庫的表才會列出,而不是所有可能的關鍵字。
mycli gif
模糊搜索和在線幫助: pgcli
如果您正在尋找 PostgreSQL 版本的 mycli,請看看 pgcli[3]。 與 mycli 一樣,它提供了上下文感知的自動補全。菜單中的項目使用模糊搜索縮小範圍。模糊搜索允許用戶輸入整體字元串中的任意子字元串來嘗試找到正確的匹配項。
pgcli gif
pgcli 和 mycli 在其 CLI 中都實現了這個功能。斜杠命令的文檔也作為補全菜單的一部分展示。
可發現性: fish
在傳統的 Unix shell(Bash、zsh 等)中,有一種搜索歷史記錄的方法。此搜索模式由 Ctrl-R 觸發。當再次調用你上周運行過的命令時,例如 ssh或 docker,這是一個令人難以置信的有用的工具。 一旦你知道這個功能,你會發現自己經常會使用它。
如果這個功能是如此有用,那為什麼不每次都搜索呢?這正是 fish shell[4] 所做的。一旦你開始輸入命令,fish 將開始建議與歷史記錄類似的命令。然後,你可以按右箭頭鍵接受該建議。
命令行規矩
我已經回顧了一些解決可發現性的問題的創新方法,但也有一些基本的命令行功能應該作為每個 REPL 所實現基礎功能的一部分:
確保 REPL 有可通過箭頭鍵調用的歷史記錄。確保會話之間的歷史持續存在。
提供在編輯器中編輯命令的方法。不管你的補全是多麼棒,有時用戶只需要一個編輯器來製作完美的命令來刪除生產環境中所有的表。
使用分頁器(pager)來管道輸出。不要讓用戶滾動他們的終端。哦,要為分頁器設置個合理的默認值。(記得添加選項來處理顏色代碼。)
提供一種通過 Ctrl-R 界面或者 fish 式的自動搜索來搜索歷史記錄的方法。
總結
在第 2 節中,我將來看看 Python 中使你能夠實現這些技術的特定庫。同時,請查看其中一些精心設計的命令行應用程序:
bpython[5]或 ptpython[6]:具有自動補全支持的 Python REPL。
http-prompt:互動式 HTTP 客戶端。
mycli[7]:MySQL、MariaDB 和 Percona 的命令行界面,具有自動補全和語法高亮。
pgcli[8]:具有自動補全和語法高亮,是對 psql[9] 的替代工具。
wharfee[10]:用於管理 Docker 容器的 shell。
了解更多: Amjith Ramanujam 在 5 月 20 日在波特蘭俄勒岡州舉辦的 PyCon US 2017[11] 上的談話「神奇的命令行工具[12]」。
作者簡介:
Amjith Ramanujam - Amjith Ramanujam 是 pgcli 和 mycli 的創始人。人們認為它們很酷,他表示笑納讚譽。他喜歡用 Python、Javascript 和 C 編程。他喜歡編寫簡單易懂的代碼,它們有時甚至會成功。
via: https://opensource.com/article/17/5/4-terminal-apps
作者:Amjith Ramanujam[13] 譯者:geekpi 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
[1]: Bpython - https://bpython-interpreter.org/
[2]: mycli - http://mycli.net/
[3]: pgcli - http://pgcli.com/
[4]: fish shell - https://fishshell.com/
[5]: bpython - http://bpython-interpreter.org/
[6]: ptpython - http://github.com/jonathanslenders/ptpython/
[7]: mycli - http://mycli.net/
[8]: pgcli - http://pgcli.com/
[9]: psql - https://www.postgresql.org/docs/9.2/static/app-psql.html
[10]: wharfee - http://wharfee.com/
[11]: PyCon US 2017 - https://us.pycon.org/2017/
[12]: 神奇的命令行工具 - https://us.pycon.org/2017/schedule/presentation/518/
[13]: Amjith Ramanujam - https://opensource.com/users/amjith
※針對物理內存的攻擊可以取得Android設備的root許可權
※美聯邦法院裁定:GPL 是可執行的合約
※該死,原生移動應用的開發成本太高了!
※GraphQL:使用Golang構建一個博客引擎API
※極客漫畫:現代的邪惡——不許 Ctrl-C
TAG:Linux技術 |
※關於界面設計的幾個問題!
※關於用戶界面設計的十個小竅門
※界面設計的一般原則!
※看看你們炫酷的命令行界面,先來我的
※和平精英:新改動界面絕對走心,遊戲畫面體驗絕對提升好多檔
※「魂斗羅」主界面的兩位好漢到底是誰?世界級的人物,你我不陌生
※公布具有3D跟蹤和觸控界面的智能指環新專利
※告別凌亂工作界面,提升3倍工作效率,這個神器你值得擁有!
※唯美的插畫界面設計
※部落衝突載入界面,你見過幾個?一
※界面大改!iOS 13 音量設計界面曝光
※現在手機界面都長一個樣?
※什麼是用戶界面和體驗設計
※地球上「智商負數」的4類物種,複雜世界面前,它們如今命運堪憂
※這是世界面積最小的國家 卻擁有至高權力和無數瑰寶
※全職法師:暗黑界面之行結束!它的報恩,讓莫凡擁有「帝級」防具
※小程序界面篇——滑動事件解析
※這才真的是面向未來的人機交互界面!
※小程序界面篇——實現代碼高亮
※真三國無雙8操作界面介紹