為什麼 Windows 下 cmd 和 PowerShell 不能方便地自定義字體?

本想用思源黑體HW作顯示字體。但發現正常情況下只有新宋體可選


特別定製的字體才能支持控制台模式。例如 Belleve 設計的字體 Inziu。

主要是因為微軟對控制台字體的元數據有限制:

https://support.microsoft.com/zh-cn/help/247815/necessary-criteria-for-fonts-to-be-available-in-a-command-window

這些字體必須滿足以下條件,可在命令會話窗口中:
 該字體必須是等寬字體。
 該字體不能為斜體字體。
 該字體不能有A或C負空間。
 如果是 TrueType 字體,則它必須是 FF_MODERN。
 如果它不是 TrueType 字體,則它必須是 OEM_CHARSET。
對於亞洲字體的附加條件:
 如果不是 TrueType 字體,字體名必須是「Terminal」。
 如果它是亞洲的 TrueType 字體,它還必須使用亞洲語言的字符集。

默認支持見註冊表:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionConsoleTrueTypeFont


當然能啊,改註冊表的話去

HKLMSOFTWAREMicrosoftWindows NTCurrentVersionConsoleTrueTypeFont

加項就行了。

不過那種字體的要求非常苛刻(經常需要涉及低層改表,比如 xAvgCharWidth),沒幾個人做得出來

當然,我做得出。→ Inziu Iosevka Downloads ←(安裝後會有三個小字體,Inziu Iosevka SC/TC/J 和 Inziu IosevkaCC SC/TC/J 可以用於控制台)


第一步,下載安裝這個字體

msyh_consola.ttf_免費高速下載

第二步,修改

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionConsoleTrueTypeFont

下的 936 值為 「*YaHeiConsola」,注意這裡是有一個星號的。

第三部,右鍵 ps 或者 cmd 標題欄,在「屬性」-&>「字體」中將字體設置為 YaHeiConsola。

效果是這樣的

如果「字體」中沒有「YaHeiConsola」,也別灰心,在註冊表中找到

HKEY_CURRENT_USERConsole\%SystemRoot%_system32_cmd.exe

將 CodePage 設置為 936。

如果你堅持使用非中文的環境那就當我上面的都沒說。總結,問題的關鍵是要修改出這個 msyh_consola.ttf 字體。正常情況下,未經修改的 CT/TT/OT 字體肯定是不能直接應用到控制台里的,細節我就不贅述了。


你為何不用PowerShell ISE呢……


請用 ConEmu


還有一個ConEmu也不錯:


用命令行的人怎麼會在乎字體


別折騰了,用 Cmder 就好了。

G


就像 asukaid 說的那樣,字體必須符合某種條件才能在控制台中使用。對於亞洲用戶來說阻止各位在控制台屬性中看到這個字體最重要的因素就是「這個字體沒有在字體元信息里聲明支持CP936」。thexujie 貼的字體在安裝之後倒是能夠直接出現在控制台屬性裡面,但是如果不修改註冊表,選擇該字體之後你會發現字體還是默認字體沒變,下次再打開屬性看還是「新宋體」,可能該字體還是不滿足某些條件。

不過我倒是發現了一款符合所有條件的控制台字體。感謝 linphy 在 請問如何更換bash on ubuntu on windows10的字體? 的回答,讓我發現了「Microsoft YaHei Mono」。不需要進行任何額外的操作,只需要安裝這款字體,然後就可以在CMD和PowerShell屬性裡面看到它,然後直接啟用它就OK了。這款字體對 WSL / Bash on Ubuntu on Windows 也是有效的,並且沒有重新打開後字體變成默認的問題。

下載:Github: https://github.com/Microsoft/BashOnWindows/files/1362006/Microsoft.YaHei.Mono.zip 或CSDN: Microsoft YaHei Mono

該字體 = 微軟雅黑 + Consolas


當然能!

前兩天剛剛折騰完這個。

首先是這個回答的理念:

改代碼頁(字符集)的方法都是耍流氓

如果不介意這點,可以參考其他答案更方便的完成任務。

題主提到的思源黑體HW也恰恰符合了這個理念。

關於思源黑體HW可以看看我的另一個答案:最好的編程字體是?

下面是修改的方法:

注意:

修改註冊表前先備份!

修改註冊表前先備份!

修改註冊表前先備份!

Windows 下的 cmd 和 PowerShell 支持字體更換,默認提供了點陣字體和新宋體兩個字體。添加自定義字體需要修改註冊表,支持添加點陣字體和 TTF 字體。本答案只討論 TTF 字體。

與 cmd 相關的註冊表項在:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionConsole

其中 TrueTypeFont 下的項就是各種不同代碼頁下的字體名稱,會顯示在命令提示符設置的字體選擇列表中。

這裡每一項都是一個字元串值,網上有教程提到可以用多字元串值,但我個人前期測試時失敗了,覺得有興趣的可以試試。

項的名稱代表該項支持的代碼頁,例如默認是0,簡體中文是936,日文是932等。

項的值就是字體的名稱,具體名稱與字體文件名的對應關係可以在下面的註冊表項查看:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionFonts

可以需要注意的是,這裡的字體必須是等寬字體,將非等寬字體加入列表會導致整個列表崩潰,字體回到點陣字體。微軟在默認的中文和日文字體名稱前都加上了一個星號(*),原因暫未查到,我照做了。

需要在一個代碼頁下加入多個字體,只要在項名稱前加"0",例如需要三個中文字體,則應該有三個項,分別為「936」、「0936」、「00936」,日文就是「932」、「0932」、「00932」,字體越多0越多

字體添加好後打開命令提示符設置窗口,加入的字體就出現在字體選擇列表中了。

P.S.

題主提到的思源黑體HW,從 GitHub 上下載的編譯好的字體文件版本並沒有設置等寬字體屬性,不能直接用在命令提示符,需要自行修改文件。直接修改貌似也會引起一些字形變化的問題,我修改字體的經驗幾乎為0,如何完美修改請參考其他大神的教程。


Powershell ISE 的字體還是能方便設置的【工具】--&>【選項】

可以考慮拿它作為cmd的替代品,win10的電腦上默認就有裝


推薦cmder


後排提示 搜索一個 yahei consolas的字體,然後,安裝,安裝以後看看是不是簡體我安裝了上賣弄一個答主的字體,不知道為什麼成了日本的了(我的輸入法添加了日本的,和這個有關?),是簡體以後就可以修改註冊表,只要添加一個0936,然後把值設置為字體的名字,字體的名字前面應該是要加上「 * 」 的,之後就可以修改了。


cmd和ps字體和active code page有關吧…65001下和936下能選擇的字體不同


右鍵點擊命令行標題欄,彈出菜單里選」屬性「不就可以設置么?


cmd和poweshellr的配色和字體看著好蛋疼和不爽,折騰了好多次,都還是不滿意。最後終於找到了我自認為很不錯的替代方案,那就是使用cdmer cmder | Console Emulator。

settings/Main 裡面將字體設置為18,加粗。

settings/Main/Tab bar裡面將Tabs選項設置為Don"t show,看著真心舒服多了。


安裝 @thexujie 和 @Belleve 提供的字體之後,直接在 PowerShell 的邊框出右鍵屬性,就可以更改字體了。並不需要更改註冊表。


用git bash不就行了, 許多別的工具鏈里也都贈送. 不喜歡bash? 再見.


推薦閱讀:

word中正文每頁首行設置一個段前距離,怎麼設置?
醫生寫的字可以有多美?
如何讓 OS X 中 Mail 的中文字體變得更好?
ttf字體被淘汰了嗎,現在新發布的字體都是otf?
Apple Color Emoji 採用的技術是怎樣的?

TAG:字體 | MicrosoftWindows | 命令提示符cmd | PowerShell |