
簡(jiǎn)介面向Notepad用戶這份主題資源包收錄了二十多款風(fēng)格各異的配色方案能有效改變軟件默認(rèn)界面的單調(diào)觀感減輕長(zhǎng)時(shí)間編碼時(shí)的視覺(jué)疲勞適合從初級(jí)到高級(jí)的程序員、文本編輯者以及喜歡自定義工作界面的技術(shù)愛(ài)好者。資源包采用zip壓縮格式共計(jì)29個(gè)文件類(lèi)型全部為xml主題文件壓縮后體積僅174KB幾乎不占用存儲(chǔ)空間。安裝方式非常直接只需將xml文件放入Notepad安裝目錄下的themes文件夾或直接用壓縮包內(nèi)的theme目錄覆蓋原目錄再在軟件語(yǔ)言菜單中選擇即可生效全程無(wú)需復(fù)雜配置。主題方案覆蓋暗色護(hù)眼、明亮清新、高對(duì)比度等主流類(lèi)型包含Monokai、Obsidian、Zenburn、Twilight等經(jīng)典配色也有Hello Kitty、Vibrant Ink等個(gè)性風(fēng)格無(wú)論日常工作、深夜寫(xiě)碼還是演示分享都能找到合適的外觀。目前已有4613人學(xué)習(xí)下載這也是主題類(lèi)資源中較受歡迎的選擇兼顧了實(shí)用性與個(gè)性化。 用Notepad的人大概都經(jīng)歷過(guò)這個(gè)時(shí)刻深夜還在改腳本白底黑字的編輯器亮得像個(gè)小太陽(yáng)眼睛酸到睜不開(kāi)。于是你開(kāi)始搜“Notepad theme”在GitHub和論壇里翻主題包下載、解壓、復(fù)制、重啟折騰半小時(shí)后編輯器終于變成深色了。這個(gè)過(guò)程的每一步我?guī)缀醵疾冗^(guò)坑而且很多坑根本不是主題本身的問(wèn)題而是文件放錯(cuò)位置、版本不對(duì)、語(yǔ)言沒(méi)識(shí)別。這篇文章就把我從“換主題總失敗”到“能自己改主題、甚至把別的軟件的主題移植過(guò)來(lái)”的完整經(jīng)驗(yàn)整理出來(lái)都是實(shí)操過(guò)的內(nèi)容。1.1 主題文件的本質(zhì)是一份XML先說(shuō)一個(gè)很多人不知道的事實(shí)Notepad的主題不是安裝包也不是壓縮配置它就是一個(gè).xml文件。Notepad啟動(dòng)時(shí)讀取這個(gè)文件里的顏色定義然后應(yīng)用到整個(gè)編輯器界面和語(yǔ)法高亮上。所以“裝主題”這件事本質(zhì)上就是“把一份xml文件放到指定目錄然后在設(shè)置里選中它”。這個(gè)目錄有兩個(gè)常見(jiàn)位置取決于你用的是什么版本安裝版通過(guò)安裝程序裝到C:\Program Files的主題目錄在%APPDATA%\Notepad\themes便攜版解壓即用的綠色版主題目錄就在你解壓目錄下的themes文件夾里判斷方法很簡(jiǎn)單在Notepad里打開(kāi)“設(shè)置”菜單找到“打開(kāi)配置目錄”之類(lèi)的入口能跳到%APPDATA%\Notepad但便攜版的目錄一般就在安裝目錄下。如果你把主題文件放到了上面其中一個(gè)目錄后設(shè)置里還是看不到八成是放錯(cuò)位置了。1.2 XML里到底定義了什么打開(kāi)任意一個(gè)主題的XML你會(huì)發(fā)現(xiàn)它主要由三大塊組成GlobalStyles、LexerStyles以及一小部分控件相關(guān)樣式。GlobalStyles定義的是全局界面顏色包括編輯器底色、默認(rèn)文本顏色、當(dāng)前行高亮色、選中文本背景色、標(biāo)簽欄顏色等。這部分決定整個(gè)編輯器看起來(lái)是什么調(diào)性。LexerStyles則按語(yǔ)言分門(mén)別類(lèi)每種語(yǔ)言下面有DEFAULT、KEYWORD、STRING、COMMENT、NUMBER等樣式條目對(duì)應(yīng)代碼里不同類(lèi)型token的顏色。所以你就明白了如果一個(gè)主題只定義了部分語(yǔ)言的顏色那么其他語(yǔ)言打開(kāi)后依然會(huì)使用默認(rèn)配色看起來(lái)就像“沒(méi)生效”。這不是你安裝有問(wèn)題是主題文件本身不完整。選主題時(shí)多看一眼它的描述盡量選那些標(biāo)注支持C/C、Python、JavaScript、HTML、Java等常用語(yǔ)言的主題。注意主題和“語(yǔ)言”是兩套獨(dú)立機(jī)制。主題負(fù)責(zé)配色語(yǔ)言負(fù)責(zé)語(yǔ)法解析。就算主題完全正常如果你打開(kāi)的文件擴(kuò)展名對(duì)應(yīng)的語(yǔ)言沒(méi)有被正確識(shí)別Notepad會(huì)把它當(dāng)成普通文本自然也就沒(méi)有任何語(yǔ)法高亮。這個(gè)坑非常隱蔽后面會(huì)展開(kāi)說(shuō)。2. 下載主題的靠譜渠道與“放對(duì)位置”的完整流程2.1 去哪里找主題更安全主題下載源我推薦三個(gè)渠道按靠譜程度排序第一是GitHub。搜索“notepad themes”能搜到不少倉(cāng)庫(kù)其中有一些把幾十個(gè)主題打包在一起維護(hù)。下載時(shí)注意看倉(cāng)庫(kù)的star數(shù)量和最后更新時(shí)間老倉(cāng)庫(kù)如果很多年不更新主題對(duì)新版Notepad的兼容性可能會(huì)出問(wèn)題。下載后通常是一個(gè)zip壓縮包解壓后得到一堆*.xml文件。第二是官方社區(qū)論壇。Notepad官網(wǎng)上有論壇板塊里面的主題帖質(zhì)量通常不錯(cuò)作者會(huì)寫(xiě)明支持的Notepad版本和語(yǔ)言范圍下載文件也會(huì)標(biāo)注適用版本。第三是一些個(gè)人博客和主題聚合站這類(lèi)來(lái)源要謹(jǐn)慎一些下載前最好用文本編輯器打開(kāi)xml文件看一眼確認(rèn)里面確實(shí)只是樣式定義沒(méi)有夾雜奇怪的腳本內(nèi)容。凡是讓你下載“exe安裝版主題”的基本都不正常主題就是xml根本不需要安裝程序。2.2 從下載到生效的完整操作流程拿到主題文件后操作流程其實(shí)很短解壓出.xml文件如果下載的本來(lái)就是單文件直接跳過(guò)這步把xml文件復(fù)制到主題目錄安裝版用%APPDATA%\Notepad\themes便攜版用解壓目錄下的themes文件夾重啟Notepad或者直接點(diǎn)“設(shè)置”菜單里的“語(yǔ)言格式”在“選擇主題”下拉框里找到剛放進(jìn)去的主題名稱選中即可這個(gè)流程聽(tīng)著簡(jiǎn)單但我在第2步栽過(guò)好幾次跟頭。尤其是同時(shí)裝了安裝版和便攜版的情況容易把文件復(fù)制錯(cuò)地方。有一個(gè)很實(shí)用的檢查方法復(fù)制完成后直接去Notepad的“語(yǔ)言格式”對(duì)話框里刷新列表如果主題沒(méi)出現(xiàn)先確認(rèn)你復(fù)制進(jìn)了正確的目錄再檢查文件擴(kuò)展名是不是.xml。有的主題下載下來(lái)是.xml.txt后綴Windows默認(rèn)隱藏了已知擴(kuò)展名你看著是xml實(shí)際上Notepad根本不認(rèn)。2.3 幾個(gè)值得長(zhǎng)期使用的經(jīng)典主題換過(guò)幾十個(gè)主題后我保留了這幾個(gè)在體驗(yàn)和兼容性上都比較穩(wěn)的主題名稱特點(diǎn)適合場(chǎng)景Dracula深紫灰背景粉/綠/青配色對(duì)比度高語(yǔ)法顏色區(qū)分明顯長(zhǎng)期寫(xiě)代碼喜歡暗色系One DarkAtom編輯器同款配色背景偏黑色彩柔和從Atom或VSCode遷移過(guò)來(lái)的用戶MonokaiNotepad早期就內(nèi)置的經(jīng)典主題橙黃高亮辨識(shí)度極高懷舊黨看久了也舒服SolarizedDark低對(duì)比度暖色號(hào)稱“科學(xué)院級(jí)”配色藍(lán)綠主色調(diào)長(zhǎng)時(shí)間閱讀代碼眼睛負(fù)擔(dān)小Obsidian黑金配色注釋用灰色關(guān)鍵詞用亮黃晚上寫(xiě)代碼、做筆記提一個(gè)選主題的通用標(biāo)準(zhǔn)背景和默認(rèn)文字顏色的對(duì)比度一定要夠別只看關(guān)鍵詞好看。注釋、字符串、數(shù)字、關(guān)鍵字這四類(lèi)顏色的區(qū)分度才是影響寫(xiě)代碼心情的核心。3. 主題裝好卻不生效這五個(gè)坑我全都踩過(guò)3.1 文件打開(kāi)還是白底語(yǔ)言壓根沒(méi)被識(shí)別這是我第一次換主題時(shí)遇到的最詭異問(wèn)題。明明設(shè)置了Dracula新建文件也是深色背景但一打開(kāi)已有的.py文件就變回白底。折騰了半小時(shí)才發(fā)現(xiàn)問(wèn)題出在“該文件的語(yǔ)言關(guān)聯(lián)”上。主題管的是“某個(gè)語(yǔ)言在界面里長(zhǎng)什么樣”如果你打開(kāi)的.py文件沒(méi)有被Notepad識(shí)別為Python它就會(huì)以純文本Normal Text顯示而純文本的樣式可能用了默認(rèn)白底。解決辦法是在Notepad的“語(yǔ)言”菜單里手動(dòng)指定一下文件語(yǔ)言比如選“P → Python”。如果希望以后所有.py文件都自動(dòng)識(shí)別檢查“設(shè)置”里的文件關(guān)聯(lián)配置確保擴(kuò)展名和語(yǔ)言關(guān)聯(lián)正確。這個(gè)坑和主題本身無(wú)關(guān)但特別容易讓人誤以為是主題壞了。3.2 背景只變了一半某些語(yǔ)言沒(méi)有完整的樣式定義另一個(gè)很常見(jiàn)的現(xiàn)象整體背景變深了但打開(kāi)某個(gè)冷門(mén)語(yǔ)言的代碼時(shí)背景又變成白色只有關(guān)鍵字有顏色。原因就是那份主題文件里沒(méi)有給這個(gè)冷門(mén)語(yǔ)言的DEFAULT樣式設(shè)置背景色。很多主題作者只覆蓋了自己常用的語(yǔ)言。遇到這種情況我有兩個(gè)處理辦法。一是檢查該主題的XML看LexerStyles里有沒(méi)有對(duì)應(yīng)的LexerType如果沒(méi)有就直接放棄或者換主題二是在“語(yǔ)言格式”里自己補(bǔ)一個(gè)選中這個(gè)語(yǔ)言把Default樣式的背景色改成主題的背景色保存即可。實(shí)操中第二種方法更靈活改完的主題相當(dāng)于給自己做了定制。3.3 中文注釋變成“豆腐塊”或發(fā)虛換深色主題后中文注釋有時(shí)候會(huì)變得很難看發(fā)虛、發(fā)毛甚至顯示成方框。這不是主題的鍋是字體設(shè)置的問(wèn)題。深色背景下默認(rèn)的宋體或者微軟雅黑在非ClearType渲染下會(huì)出現(xiàn)邊緣毛刺觀感極差。我的建議是在“設(shè)置 → 首選項(xiàng) → 字體”里把主字體換成Consolas或者JetBrains Mono字號(hào)按需調(diào)到10或11同時(shí)開(kāi)啟“使用全局字體”。代碼字體用西文字體中文注釋就交給系統(tǒng)做字體回退這樣既保證了代碼的等寬對(duì)齊中文也能正常顯示。實(shí)測(cè)下來(lái)Consolas配合中文注釋是兼容性最好的組合。3.4 切換主題后部分元素仍是默認(rèn)色有些主題切換后當(dāng)前行高亮、選中文本背景、行號(hào)區(qū)背景這些元素還是默認(rèn)的藍(lán)色或白色整個(gè)界面看起來(lái)像拼接出來(lái)的。這是因?yàn)檫@些元素屬于GlobalStyles版本較老的主題文件里這部分本來(lái)就缺失或不完整Notepad會(huì)退回到默認(rèn)值。判斷方法很簡(jiǎn)單用文本編輯器打開(kāi)主題xml搜索WidgetStyle開(kāi)頭的條目如果條目很少那必然會(huì)出現(xiàn)界面元素沒(méi)被覆蓋的情況。解決方法是直接在“語(yǔ)言格式”里的“全局樣式”分類(lèi)下手動(dòng)調(diào)整這些元素或者找一個(gè)更新更完整的主題。這里提醒一句下載主題時(shí)優(yōu)先選作者最近兩年還在維護(hù)的版本兼容性會(huì)好很多。3.5 主題列表里找不到剛放進(jìn)去的主題這個(gè)坑出現(xiàn)頻率極高原因通常有三個(gè)一是文件沒(méi)有復(fù)制到當(dāng)前運(yùn)行版本對(duì)應(yīng)的主題目錄比如同時(shí)存在安裝版和便攜版你復(fù)制給了安裝版但運(yùn)行的是便攜版二是擴(kuò)展名不是.xml系統(tǒng)隱藏后綴導(dǎo)致文件名變成了theme.xml.txt三是Notepad版本太老不支持換膚功能或者主題格式不兼容。逐個(gè)排查就好99%都能解決。提示改完主題后不一定要重啟Notepad在“語(yǔ)言格式”里切換就能即時(shí)生效。但如果碰到打開(kāi)新文件后主題偶發(fā)不刷新的情況徹底重啟一次是最省心的辦法。4. 把Hyper theme移植成Notepad主題一次跨工具的配色遷移實(shí)戰(zhàn)4.1 Hyper theme是什么為什么值得移植Hyper是一個(gè)開(kāi)源終端模擬器它的主題生態(tài)很繁榮社區(qū)里叫“hyper theme下載”的資源非常多。大家喜歡Hyper主題的原因有三點(diǎn)顏色飽和度高像素級(jí)統(tǒng)一背景色和文字對(duì)比度經(jīng)過(guò)專門(mén)優(yōu)化同一套主題在不同終端、編輯器里都有對(duì)應(yīng)版本風(fēng)格統(tǒng)一。我當(dāng)時(shí)就是因?yàn)橄矚gHyper的Dracula配色又不想開(kāi)兩個(gè)軟件兩套色就琢磨著把它移植到Notepad里。這個(gè)思路其實(shí)適用于任何終端主題——你只要理解了配色的映射邏輯就能把VS Code的主題、Hyper的主題、iTerm的主題搬到Notepad里用。4.2 把Hyper主題的顏色“翻譯”成Notepad的樣式Hyper主題一般以JavaScript配置或擴(kuò)展包的形式提供里面是一個(gè)十六進(jìn)制顏色數(shù)組。以流行的Hyper Dracula為例核心顏色大概是用途顏色值背景#282A36前景默認(rèn)文字#F8F8F2注釋#6272A4青色類(lèi)型#8BE9FD綠色字符串#50FA7B橙色數(shù)字#FFB86C粉色關(guān)鍵字#FF79C6紫色#BD93F9紅色錯(cuò)誤#FF5555黃色#F1FA8C拿到這些顏色后要做的是把它們映射到Notepad的樣式體系里。我的映射原則很簡(jiǎn)單背景和前景直接用關(guān)鍵字選最醒目、最有個(gè)性的顏色粉色或青色字符串用綠色注釋用降低飽和度的灰紫色數(shù)字選橙色錯(cuò)誤或者宏定義用紅色。4.3 用XML片段實(shí)現(xiàn)Hybrid風(fēng)格的主題新建一個(gè)空白xml文件命名成Hyper-Dracula.xml放入Notepad主題目錄。核心結(jié)構(gòu)參考下面這個(gè)經(jīng)過(guò)精簡(jiǎn)的示例NotepadPlus Theme nameHyper-Dracula GlobalStyles WidgetStyle nameGlobal background styleID0 fgColorF8F8F2 bgColor282A36 fontName fontStyle0 fontSize / WidgetStyle nameGlobal foreground styleID1 fgColorF8F8F2 bgColor282A36 fontName fontStyle0 fontSize / WidgetStyle nameCurrent line background styleID2 fgColorF8F8F2 bgColor44475A fontName fontStyle0 fontSize / WidgetStyle nameSelection background styleID3 fgColorF8F8F2 bgColor44475A fontName fontStyle0 fontSize / /GlobalStyles LexerStyles LexerType namecpp descC/C WordsStyle nameDEFAULT styleID0 fgColorF8F8F2 bgColor282A36 fontName fontStyle0 fontSize / WordsStyle nameKEYWORD styleID1 fgColorFF79C6 bgColor282A36 fontName fontStyle1 fontSize / WordsStyle nameSTRING styleID2 fgColor50FA7B bgColor282A36 fontName fontStyle0 fontSize / WordsStyle nameCOMMENT styleID3 fgColor6272A4 bgColor282A36 fontName fontStyle2 fontSize / WordsStyle nameNUMBER styleID4 fgColorFFB86C bgColor282A36 fontName fontStyle0 fontSize / /LexerType /LexerStyles /Theme /NotepadPlus這段XML的含義很直白GlobalStyles定義了編輯器底色和文字顏色LexerStyles里以C/C為例定義了關(guān)鍵字、字符串、注釋、數(shù)字的顏色。你只需要把LexerType復(fù)制幾份改成Python、JavaScript、HTML等語(yǔ)言的名字再把對(duì)應(yīng)樣式名微調(diào)一下就能做一個(gè)覆蓋大部分常用語(yǔ)言的新主題。實(shí)際保存時(shí)建議批量把fgColor和bgColor替換成上面表格里的色值逐一語(yǔ)言適配。4.4 移植過(guò)程中最實(shí)用的三個(gè)技巧第一個(gè)技巧是別追求“每語(yǔ)言全覆蓋”。如果你用Notepad主要是寫(xiě)Python和前端文件那就先給這兩類(lèi)語(yǔ)言做好映射其他語(yǔ)言共用默認(rèn)配色等有空再補(bǔ)齊。第二個(gè)技巧是字體風(fēng)格也要跟著顏色走關(guān)鍵字用粗體注釋用斜體這樣即使有人是色盲光看字形也能區(qū)分。第三個(gè)技巧是保存前先備份默認(rèn)主題xml改壞了隨時(shí)能恢復(fù)。移植完之后你會(huì)發(fā)現(xiàn)Notepad里顯示的配色和Hyper終端里的配色完全相同寫(xiě)代碼時(shí)視覺(jué)上不再有“跳戲”的感覺(jué)。5. 用Style Configurator手改主題可視化調(diào)色比寫(xiě)XML直觀得多5.1 Style Configurator的正確打開(kāi)方式如果你想微調(diào)主題不一定要手動(dòng)編輯xml。Notepad內(nèi)置了“語(yǔ)言格式”Style Configurator面板入口在“設(shè)置”菜單下。這個(gè)面板的布局是左上角選主題左中選語(yǔ)言右邊選樣式下方是前景色、背景色、字體、字號(hào)、粗斜體等設(shè)置項(xiàng)底部有實(shí)時(shí)預(yù)覽區(qū)。它的工作邏輯是這樣的你當(dāng)前選中的主題會(huì)作為基底所有修改都會(huì)疊加到這個(gè)主題之上。也就是說(shuō)你可以一邊預(yù)覽一邊改顏色改完點(diǎn)“保存”或者“另存為”就能把調(diào)整結(jié)果持久化到當(dāng)前主題的xml里。5.2 可視化修改的完整操作路徑我平時(shí)微調(diào)主題的操作路徑是這樣的在“選擇主題”下拉框里確定當(dāng)前用的是哪個(gè)主題在語(yǔ)言列表里選擇要調(diào)整的語(yǔ)言比如Python在樣式列表里選擇KEYWORD、STRING、COMMENT等條目點(diǎn)擊“前景色”開(kāi)關(guān)然后在色板上取一個(gè)顏色需要加粗就勾選“粗體”注釋如果想要弱化一點(diǎn)可以勾選“斜體”點(diǎn)“保存”馬上就能在編輯器里看到效果這套操作適合做局部?jī)?yōu)化比如你覺(jué)得某個(gè)主題的注釋顏色太亮、搶了代碼本身的風(fēng)頭就可以只把注釋調(diào)暗。還有一個(gè)很常用的小技巧把“選中文本背景色”調(diào)成稍稍深于編輯器背景的顏色這樣光標(biāo)選中代碼時(shí)不會(huì)刺眼夜間寫(xiě)代碼舒服很多。5.3 手改配色時(shí)我堅(jiān)持的三條原則第一背景色和默認(rèn)文字色的亮度差必須足夠大。我自己習(xí)慣在HSL模式下把背景的L值控制在10%到20%之間文字的L值控制在80%以上這樣長(zhǎng)時(shí)間看不會(huì)累。第二同一主題里盡量控制高飽和顏色的數(shù)量。很多主題失敗就失敗在五顏六色全都用高飽和結(jié)果關(guān)鍵字、字符串、數(shù)字糊成一團(tuán)。高飽和色只應(yīng)留給關(guān)鍵字和字符串注釋、數(shù)字用一些中等偏低的飽和度即可。第三不要只用顏色區(qū)分重點(diǎn)。給關(guān)鍵字加粗、給注釋加斜體這種字形的區(qū)分對(duì)信息獲取幫助非常大而且能照顧到色弱人群。注意在Style Configurator里點(diǎn)“保存”會(huì)直接修改當(dāng)前主題xml改完就回不去了。我建議在動(dòng)手之前先把themes目錄整個(gè)復(fù)制一份備份。這個(gè)習(xí)慣救我很多次——有一次我把Monokai的背景調(diào)成了墨綠色保存后怎么看怎么難受最后靠備份文件一鍵還原。5.4 把修改固化成一個(gè)獨(dú)立的新主題如果你調(diào)出了自己很滿意的配色又不想破壞原主題可以把修改固化成一個(gè)獨(dú)立主題。做法是先復(fù)制主題xml重命名比如MyTheme.xml再?gòu)摹斑x擇主題”下拉框里選它之后在Style Configurator里做的所有修改都會(huì)寫(xiě)入這個(gè)新文件。這樣既保住了原主題又能擁有一個(gè)完全屬于自己的、不會(huì)因?yàn)楦露桓采w的主題。我個(gè)人現(xiàn)在的做法是長(zhǎng)期使用自己從Hyper風(fēng)格改出來(lái)的深色主題在不同機(jī)器上直接復(fù)制同一份xml配合便攜版Notepad所有機(jī)器的編輯器長(zhǎng)得一模一樣省去了重新配置的麻煩。如果你也想折騰建議從備份主題目錄開(kāi)始然后去下載一兩個(gè)口碑好的主題拆開(kāi)看看結(jié)構(gòu)再試著改幾個(gè)顏色。用不了幾次你就能熟練到看到任何一個(gè)終端或編輯器的配色方案就知道該把哪個(gè)顏色填到Notepad的哪個(gè)樣式里這比到處找現(xiàn)成主題有意思得多。本文還有配套的精品資源點(diǎn)擊獲取