答案1
看鍵盤輸入和文字輸出如何運作?了解該主題的概述。這取決於應用程式是在終端機中運行還是直接與 GUI 環境對話。
在終端機中,終端軟體(本世紀通常是終端模擬器)決定字元的編碼。它透過設定來傳達字元編碼(輸入和輸出相同)語言環境環境變數LC_CTYPE
。如果此變數未設定或設定為C
,則終端不會提供任何訊息,因此應用程式無法知道編碼是什麼。在終端機中,字元作為字元發送到應用程式;非字元輸入(功能鍵、遊標鍵、帶有修飾符的鍵Alt等)發送為轉義序列(其中一些如控製字元反而)。
X11應用程式接收以下形式的輸入按鍵事件。 KeyPresss 事件包含低階指示(keycode
大致對應於按鍵的實體位置,並對state
活動修飾符進行編碼)。應用程式可以調用諸如XLookupString
(傳統函數,僅限Latin-1)或XmbLookupString
(支援其他單字節編碼的函數)或XwcLookupString
(支援多位元組編碼的函數)或Xutf8LookupString
(現代UTF-8函數)將此原始資訊轉換為字串。
從按鍵到字元的對應可以在各個層級進行更改;鍵盤輸入和文字輸出如何運作?有一個概述。
答案2
鍵盤不發送字元;它發送掃描碼。例如,當您在典型的美式鍵盤上按下標有“e”的鍵時,它會發送一個掃描碼,其實質上是“主組中第二行字母數字鍵左側的第三個鍵” 。此掃描程式碼由核心(或作業系統的某些其他元件)轉換為字元(或通常轉換為鍵符號,例如「Print Screen」之類的鍵),特別是在 Linux 中,可能透過圖形子系統。
通常,作業系統或圖形子系統提供一個或多個控制轉換錶的實用程式;例如,在 Windows 和 Linux 中,您都可以安裝任意數量的鍵盤佈局,並在它們之間輕鬆切換。
應用程式獲得什麼取決於作業系統的約定。在 Windows 上,控制台應用程式根據命令設定的目前控制台代碼頁取得編碼的字元chcp
;圖形應用程式會獲得一個鍵符號,該符號通常會轉換為 UTF-16 編碼字元。在 Linux 上,應用程式通常會取得 UTF-8 編碼的字元。例如,如果我ă
在鍵盤佈局設定正確的情況下按下標示 (LATIN SMALL LETTER A WITH BREVE, U+0103) 的按鍵,
- Windows 上的控制台應用程式
chcp 1250
將取得一個位元組'\xE3'
(十進位 227)。 - Windows 上的控制台應用程式
chcp 852
將取得一個位元組'\xC7'
(十進位 199)。 - Windows 上的圖形應用程式將獲得一個合適的鍵符號,該符號通常會作為兩個位元組
'\x03'
'\x01'
(或短整數0x103
)進行儲存/處理。 - Linux 上的終端應用程式將獲得兩個位元組
'\xC4'
'\x83'
(UTF-8 編碼中的 <U+0103>)。 - Linux 上的圖形應用程式將獲得一個合適的鍵符號,該符號通常會作為兩個位元組進行儲存/處理
'\xC4'
'\x83'
(UTF-8 編碼中的 <U+0103>)。
(請注意,我所說的 Windows 是指 Windows NT 及其後續版本,例如 Windows XP、Windows Vista、7 或 10。Windows 95 等是完全不同的作業系統系列,幸運的是不再使用。)
在 Vim 中你會得到兩個新的翻譯層:
您可以使用以下命令安裝鍵盤翻譯映射
set keymap
;參見:help 'keymap'
和:help mbyte-keymap
。這有助於在無法在作業系統層級安裝鍵盤佈局的系統上以所需語言輸入文字。您可以使用該命令定義映射
:map
。看:help :map
。