寫在前面
針對在部落格園TinyMCE模式下,內建的插入程式碼功能不支援Go語言的問題,本文提出兩個並不十分完美的解決方案。本文所提方案支援程式碼高亮、摺疊、行號。同時,本文中的方法二可以用來自定義程式碼高亮(不管是什麼語言)。由於在下並沒有前端基礎,所以某些表述可能不夠確切,歡迎讀者批評指正。
正文
在TinyMCE模式下,有兩種插入程式碼塊的方式,如下圖所示。
其中,藍色框中方法是利用第三方外掛實現的,支援Go語言,但摺疊的程式碼展開後不能再摺疊,且沒有程式碼複製按鈕。紅色框中方法是部落格園後臺自己實現的,直接生成HTML程式碼來渲染高亮,但該方法目前不支援go語言。
針對這種情況,在下找到兩種不太完美的解決方案。
方案一
使用Markdown。
首先需要進行以下設定:進入部落格園主頁(https://www.cnblogs.com/)-->滑鼠放在右上角自己的頭像上(不要點選)-->在下拉選單框中點選“我的部落格”-->在頁面上方找到“管理”按鈕並點選(不同皮膚下“管理”按鈕的位置可能有所不同)-->點選“設定”標籤-->勾選“顯示行號”-->點選“儲存”。如下圖所示:
然後就可以寫MarkDown程式碼了。如下面的Markdown語句,
1 <details> 2 <summary>View Code</summary> 3 4 ```go 5 package main 6 7 import "fmt" 8 9 func main(){ 10 fmt.Println("hello world") 11 } 12 ``` 13 </details>
將產生以下效果:
該方案注意事項如下:
- <summary>View Code</summary> 中 View Code 可以換成自己喜歡的文字,支援中文。
- <summary>View Code</summary> 後面必須空出一行,這一點網上許多資料都沒有提到。
- 需要顯式指明語言(如上面程式碼第4行,go或golang都可以,且不區分字母的大小寫)。
以上方案存在明顯缺陷:1)並沒有解決TinyMCE模式下的問題,換用Markdown,屬於耍無賴。2)沒有程式碼複製按鈕。
方案二
如前所述,部落格園提供“內建”的程式碼塊插入功能,支援高亮、摺疊、行號、複製等功能。該功能的語法高亮,是利用後臺演算法,通過將程式碼直接用HTML語言“修飾”(指明字型、顏色等)來實現的。遺憾的是,目前該功能還沒有針對Go語言的“修飾器”。
所以,一種從根本上解決問題的思路是:第一步,依然利用內建功能插入Go程式碼,只不過先隨便選一種其它語言(如C++、C#等),顯然,此時的高亮肯定是不盡如人意的,因為不同的語言關鍵字有所不同,所以,需要進行第二步。第二步,將【部落格園網頁中修飾程式碼格式的那段HTML程式碼】替換成【支援Go語法高亮的HTML程式碼】。
那麼,問題來了:1)怎麼找到後臺HTML程式碼?2)怎麼得到【支援Go語法高亮的HTML程式碼】?不會是需要手寫吧?
回答:1)回到本文第一張圖片,藍色框右邊的按鈕,就是寫著“HTML”的那個,點選它,就能看到部落格對應的HTML程式碼。2)肯定不是手寫,但需要藉助其它工具,Sublime Text,可以到這裡下載,然後根據這裡和這裡操作。在此特別感謝以上三個連結的作者。
至此,動手能力強或者有HTML基礎的讀者,可以搞起來了。想了解細節的,可以往後看。
步驟1:根據上面三個連結,安裝 Sublime Text 和 SublimeHighlight 外掛,這裡不再贅述。
步驟2:到 Sublime Text安裝目錄\Data\Packages\SublimeHighlight 下,開啟 themes.png 檔案,可以看到各主題名稱和對應的式樣,如下圖:
步驟3:還是在步驟2中的目錄下,用任意文字編輯器(如Sublime Text、notepad++等)開啟 SublimeHighlight.sublime-settings 檔案,進行如下圖所示的修改:
注意,以上設定的是匯出的程式碼式樣,不是Sublime Text編輯區的程式碼式樣,讀者會發現修改配置後編輯區程式碼的式樣沒有變化,這是正常現象。
步驟4:在Sublime Text中鍵入要插入的Go程式碼段,注意確保檔案字尾為 .go。接著,按下圖操作:
步驟5:用編輯器的批量替換功能,將 background-color: #f8f8f8 全部替換為 color: #008080 ,這裡, #f8f8f8 是行號的背景色,不同主題可能會有不同, #f8f8f8 對應的是 default 主題; #008080 是部落格園預設的行號顏色,讀者也可以設定自己喜歡的其它顏色。這麼做的原因是:部落格園插入程式碼塊的背景是灰色的(#f5f5f5),如果行號有其它顏色背景的話,會不好看。結果如下圖所示(圖中為 default 主題,並且為清晰展示,手動對程式碼進行了換行):
步驟6:在部落格園中,使用內建插入程式碼按鈕,插入程式碼,語言任選一種,勾選“全部摺疊”和“顯示行號”,最後點選“插入程式碼”按鈕。如下圖:
步驟7:在部落格園編輯頁面,點選“HTML”按鈕,開啟部落格對應的HTML程式碼,如下圖,用上圖紅框內程式碼替換下圖紅框內程式碼,然後點選左下角“更新”按鈕。(下圖中程式碼也是經過手動排版的)
步驟8:最終效果如下圖:
GIF顏色有些失真,靜態圖如下
如果想要使用 themes.png 中的黑色背景主題,如 vim 主題,需要在步驟7中圖片上劃藍線的語句中加入 style="background: #000000;" ,即將背景設為黑色,同時,建議在步驟5中將行號顏色設為與黑色對比鮮明的顏色(如 #ffc300 )。效果如下:
多說一句,修改步驟7中圖片上劃綠線的語句,可以修改整個“程式碼展示框”的背景,讀者可以自行試驗。
至此,方案二介紹完畢。
該方法的缺點也很明顯——麻煩!
題外話:
notepad++也能匯出HTML檔案,十分簡便(貌似高版本的 notepad++ 自帶 NppExport 外掛),但不支援連同連行號一起匯出(這裡有一個解決方案,很佩服作者的清奇思路),同時,生成的HTML程式碼將式樣抽離為一堆類選擇器,因此,在和部落格園的HTML程式碼進行整合的時候會比較麻煩,特別是當一篇部落格需要插入多段程式碼的時候。
VS Code將程式碼匯出為HTML檔案的步驟更加繁瑣,需要藉助第三方工具,且同樣不支援程式碼行號。這個局面,在下也很驚訝。如果有知道利用VS Code將程式碼匯出為HTML的簡單方法的讀者,煩請不吝賜教。
寫在後面
- 上面教程針對的是摺疊程式碼並顯示行號的情況,如果不需要這些功能,只要在部落格園和Sublime Text中做相應調整即可,相信讀者可以舉一反三。
- 再次對本文中所有連結的作者表示由衷感謝。
- 在下才疏學淺,文中難免有錯誤疏漏之處,歡迎大家批評指正,您的批評是在下前進的不懈動力。