5 個最酷的終端分頁器

2019-12-15 12:34:00

像紀錄檔或原始碼這樣的大檔案可能會多達成千上萬行,這使得在檔案內導航非常困難,尤其是在終端上。此外,大多數終端模擬器的回滾緩衝區只有幾百行。這可能使得無法使用列印到標準輸出的實用程式(例如 catheadtail)在終端中瀏覽大型檔案。在計算時代的早期,程式設計師通過開發用於以虛擬“頁面”形式顯示文字的實用程式來解決這些問題,該實用程式被形象地描述為分頁器pager

分頁器提供了許多使文字檔案導航更加簡單的功能,包括捲動、搜尋功能,以及作為命令管道的一部分而具有的功能。與大多數文字編輯器相比,某些終端分頁器不需要載入整個檔案即可檢視,這使得它們更快,特別是對於非常大的檔案。

在現代 Linux 計算時代,終端模擬器比以往更加複雜。它們提供了對繽紛的色彩、終端尺寸調整以及許多其它功能的支援,這些功能使得辨析螢幕上的文字變得更加輕鬆和高效。從諸如 pgmore 這樣極其簡單的 UNIX 實用程式,到涵蓋各種使用場景的、功能廣泛的複雜程式,終端分頁器也經歷了類似的演變。考慮到這一點,我們或“多”或“少”地匯總了一些最受歡迎的終端分頁實用程式的列表。

more

more 是最早的分頁器之一,最初在 3.0 BSD 版本中出現。more 的第一個實現由 Daniel Halbert 編寫於 1978 年。從那時起,more 已成為許多作業系統的普遍功能,包括 Windows、OS/2,MacOS 和大多數 Linux 發行版。

more 是一個非常輕量級的實用程式。util-linux 軟體包中提供的版本只有不到 2100 行的 C 語言程式碼。但是,這種較小的程式碼大小是有代價的。大多數版本的 more 的功能相對有限,不支援向後捲動或搜尋。命令也同樣精簡:按確認鍵可捲動一行,或按空格鍵捲動一頁。其他一些有用的命令包括:

  • 在閱讀時按 v 鍵以在預設的終端編輯器中開啟當前檔案。
  • /模式 可以讓你搜尋下一個出現的“模式”。
  • 以多個檔案作為引數呼叫 more 時,:n:p 將分別開啟下一個和上一個檔案    ### less

less 最初被認為是 more 的繼承者,解決了它的一些局限性。lessmore 的功能為基礎,增加了許多有用的功能,包括向後捲動、向後搜尋。它也更適合視窗大小調整。

less 中的導航方式與 more 類似,儘管 less 也從 vi 編輯器借用了一些有用的命令。使用者可以使用熟悉的主行導航鍵home row navigational keys(LCTT 譯註:指 左手的 ASDF 和右手的 JKL;,及大拇指所在的空格鍵)瀏覽文件。看一眼 less 的手冊頁,就會發現相當多的可用命令。一些特別有用的範例包括:

  • ?模式 可讓你在檔案中向後搜尋“模式”。
  • &模式 僅顯示具有“模式”特徵的行。這對於發現自己經常要使用 $ grep 模式 | less 的人特別有用。
  • 使用 -s(或 –sqeueeze-blank-lines)標誌來呼叫 less,使你可以檢視空白較大的文字檔案。 多個換行符被簡化為單個中斷行。
  • 在該程式中呼叫的 s 檔名 將輸入儲存到 檔名中(如果輸入來自管道)。
  • 或者,使用 -o 檔名 標誌來呼叫 less 將把 less 的輸入儲存到 檔名 中。    隨著這些增強的功能也帶來了體積的略微增大。在寫作本文時,Fedora 隨附的 less 版本大約有 25000 行原始碼。當然,除非是受儲存限制最大的系統,在所有其它的系統上這都不是問題。lessmore 功能更多。

most

less 旨在擴充套件 more 的現有功能,而 most 採用另一種方法。most 不是在傳統的單個檔案檢視上進行擴充套件,而是使使用者能夠將其檢視拆分為“視窗”。每個視窗以不同的檢視模式包含不同的檔案。

重要的是,most 考慮了其輸入文字的寬度。預設的檢視模式是不換行的(less 中的 -S 引數),此功能在處理“寬”檔案時特別有用。儘管對於某些使用者來說,這些設計決策可能代表著與傳統的重大偏離,但最終結果卻非常強大。

除了 more 提供的導航命令外,most 使用直觀的助記符進行檔案導航。例如,t 移至檔案的頂部(Top),而 b 移至底部(Bottom)。這樣,不熟悉 vi 及其衍生品的使用者會發現 most 非常簡單好用。

most 的與眾不同之處在於它能夠快速輕鬆地拆分視窗和上下文。例如,可以使用以下命令開啟兩個不同的文字檔案:

$ most textFile1.txt textFile2.txt

為了水平拆分螢幕,請使用組合鍵 Ctrl+x, 2Ctrl+w, 2:n 命令將在給定視窗中開啟下一個檔案引數,提供兩個檔案的分屏檢視:

如果在一個視窗中關閉自動換行,它不會影響其他視窗的行為。(行末的)\ 字元表示換行或摺疊,而 $ 字元表示檔案超出了當前視窗的限制。

pspg

使用 SQL 資料庫的人員通常需要能夠一目了然地檢查資料庫的內容。許多流行的開源 DBMS(例如 MySQL 和 PostGreSQL)的命令列介面都使用系統預設的分頁器來檢視無法顯示在單個螢幕上的輸出。諸如 moreless 之類的實用程式是圍繞呈現文字檔案的想法而設計的,但是對於更結構化的資料,還有一些不足之處。天真的文字分頁程式沒有寬的表格資料的概念,當處理大型查詢時,這可能會令人感到沮喪。

pspg 試圖通過為使用者提供在檢視時凍結列、原位排序資料並為輸出著色的功能來解決此問題。儘管pspg 最初是專門用作 psql 的分頁器的替代品,但該程式還支援檢視 CSV 資料,並且是 mysqlpgcli 的合適的直接替代品。

Vim

在現代的顏色鮮明的終端中,無休止的黑色頁面上的灰色文字感覺太過時了。強大的文字編輯器(如 vim)提供的語法高亮顯示選項對於瀏覽原始碼很有用。此外,vim 提供的搜尋功能遠遠超過了競爭對手。考慮到這一點,vim 附帶了一個 shell 指令碼 less.sh,該指令碼可以使 vim 替代傳統的分頁器。

要將 vim 設定為手冊頁的預設分頁器,請將以下內容新增到 shell 的設定中(如果使用預設的bash shell 的話是 ~/.bashrc):

export MANPAGER="/bin/sh -c \"col -b | vim -c 'set ft=man ts=8 nomod nolist nonu noma' -\""

或者,要將 vim 設定為系統範圍內的預設分頁器,請找到 less.sh 指令碼。(你可以在當前 Fedora 系統上的 /usr/share/vim/vim81/macros/ 找到它。)將此位置匯出為變數 PAGER 以將其設定為預設值,或者將其設定為別名以顯式呼叫它。