關於 LESS_TERMCAP_* 變數的文件?
在設置一堆這些變數時,我在使用較少查看的聯機幫助頁中看到了這些漂亮的顏色。它們是什麼意思,文件在哪裡?這是由less還是termcap解釋的?
截屏
Termcap是 Less 用來訪問終端的庫。Termcap 在很大程度上已經過時,已被Terminfo取代,但 Terminfo 為應用程序提供了 Termcap 兼容性介面。Less 滿足於 Termcap 介面並使用它。
Termcap 庫是對終端設施的描述。每個設施由兩個字母(或更一般地兩個字元)程式碼標識。例如,
hc
辨識硬拷貝終端(即列印機,而不是螢幕);co
是列數;md
開始顯示粗體文本。每個能力都有一個值,它可以是布爾值(如hc
)、整數(如co
)或字元串(如md
)。許多字元串是轉義序列,應用程序可以發送到終端以達到一定的效果。為什麼要轉義序列?因為終端和應用程序之間的介面是一個字元流(更準確地說,每個方向一個字元流:一個用於使用者輸入,一個用於輸出顯示)。當應用程序向終端寫入字元時,通常會顯示該字元。一些字元有不同的行為:它們是控製字元,執行諸如移動游標、切換顯示屬性等操作。命令比控製字元多得多,因此大多數命令都通過轉義序列訪問,轉義序列以一個特殊字元(通常是轉義字元,因此得名)。
例如,當 Less 想要顯示一些粗體文本時,它會查找
md
功能的值。這是一個字元串,Less 將其寫入終端。終端將此字元串辨識為轉義序列,並調整其內部狀態,以便後續字元以粗體顯示。在硬體終端的早期,不同品牌的轉義序列和能力不同;Termcap 數據庫和介面的發明使應用程序不必了解每個終端模型。如今,大多數終端仿真器都具有非常相似的功能,但 Termcap 或 Terminfo 數據庫對於處理細微差別仍然很有用。
LESS_TERMCAP_*
變數可以在環境或文件.lesskey
中設置。它為 Less 提供了終端功能的替代值。當 Less 想要使用終端功能時,比如切換到粗體,它首先檢查是否有LESS_TERMCAP_md
變數。如果這個變數存在,Less 使用它的值作為轉義序列來切換到粗體。如果不是,它使用來自 Termcap 數據庫的值。此機制允許使用者覆蓋 Less 的 Termcap 數據庫設置。最有用的
LESS_TERMCAP_*
設置是轉義序列。您可以將屬性映射到不同的屬性。您可以使用該命令在系統的Termcap或Terminfo數據庫tput
中查找目前終端的能力值。如果您不介意依賴終端,則可以直接使用轉義序列。例如,此設置告訴 Less 在指示以粗體顯示時以粗體紅色顯示:LESS_TERMCAP_md=$(tput md; tput AF 1)
或者如果您的
tput
命令不支持 Termcap 名稱:LESS_TERMCAP_md=$(tput bold; tput setaf 1)
Man 發送的文本格式非常簡單,只能表示粗體和斜體。此外,Less 使用各種格式功能供其內部使用,例如突出顯示搜尋結果和在底部顯示模式行。以下是 Less 使用的一些轉義序列(我只列出了對重新映射相當有用的功能):
termcap terminfo ks smkx make the keypad send commands ke rmkx make the keypad send digits vb flash emit visual bell mb blink start blink md bold start bold me sgr0 turn off bold, blink and underline so smso start standout (reverse video) se rmso stop standout us smul start underline ue rmul stop underline
要以顏色顯示輸出,請使用該
setaf
功能(或AF
使用 Termcap)。文件
LESS_TERMCAP_*
中未提及這些設置。LESS
我能提供的最佳參考是我的答案。