Life With Vim[0] 批量格式化和去重

晚上想著重新弄一下Urxvt的中文字體。

其實字體文件挺討人厭的。主要是因為,同一種字體的各種bolditalic,condensed等等的字形都在不同的字體文件中定義。而我下載的又是字體包,而且好幾個帶中文的(其中包含一些韓日語的字體)。時間一長,fc-list :lang=zh的輸出看的我頭的大。于是立馬就想到用Vim整理一下看看都有哪些。

于是

fc-list :lang=zh > fonts
vim fonts

里面超過兩百條條目都是這樣的:

/usr/share/fonts/adobe-source-han-sans/SourceHanSans-ExtraLight.ttc: Source Han Sans K,???,Source Han Sans K ExtraLight,??? ExtraLight:style=ExtraLight,Regular

大致格式就是:

字體文件路徑:字體家族名,別名1,別名2:所定義的字體風格

而其中字體家族名是我真正需要的東西:

  1. 首先把字體名曬出來。也就是刪掉每行第一個冒號前的第二個冒號后的所有內容:

    :%s/^.*:\(.*\):.*$/\1/g
    

    解釋:
    : 進入命令模式
    % 在整個文檔范圍內匹配
    s/XXX/YYY/g 把所有匹配到的XXX替換成YYY

    XXX=^.*:\(.*\):.*$
    開頭的^ 是代表行首
    .* 代表任意個任意字符
    : 代表冒號
    \(.*\) 記下這一串匹配到的字符串,也就是在兩個冒號之間的任意個任意字符
    結尾的$ 代表行尾
    YYY=\1 調用剛剛被匹配并記錄下來的字符串

    就把原來的條目變成了這樣:

    Source Han Sans K,???,Source Han Sans K ExtraLight,??? ExtraLight
    
  2. 然后需要刪掉所有的別名只留下一個家族名。因為在調用字體時,別名通常被限定在某種字形上,而通過家族名調用,則相當于調用了所有字形。該粗該細還是該斜體,只需要制定一個家族名,系統(tǒng)會按需選擇。又因為家族名都在第一項,別名用逗號隔開。可以按照上面的命令再來一次:

    :%s/^\([^,]*\),.*$/\1/g
    

    和上面差不多,只不過在定義XXX的匹配模式的時候用到了[^,]*。以外匹配除了,外的任意個所有字符。
    因為,*默認匹配最長的字符串,如果行內不止一個,它就會默認把后面表達式中的哪個,匹配到行內最后一個。其實還有別的方法,但是我實在懶得記。

    這樣條目就只剩下家族名了:

    Source Han Sans K
    
  3. 因為別名的關系,家族名有很多重復的。所以只需要:

    :%sort u
    

    這樣,整個個文件就完成去重。所有條目都是唯一的了。系統(tǒng)中有那些中文字體就一目了然。

不到一分鐘搞定。想幾年前我扒一個網站的HTML文件里的表格數(shù)據(jù)的時候,又是手工,又是用Python爬DOM。一整天都能浪費掉。。。。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 官網 中文版本 好的網站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,711評論 0 5
  • 從匹配中返回值 Match 對象 成功的匹配總是返回一個 Match 對象, 這個對象通常也被放進 $/ 中, (...
    焉知非魚閱讀 1,937評論 0 1
  • 你,為什么突然說,想換座位了。 白凈,上學期的你分明不是如此的,乍一轉眼,時光匆匆,你也是說變就變,再見到你...
    梵O_o筱閱讀 355評論 0 0
  • 安裝deepTools需要依賴pyBigWig包。安裝pyBigWig包時出錯: 找到錯誤 上網搜索解決方法發(fā)現(xiàn),...
    JeremyL閱讀 3,519評論 3 2

友情鏈接更多精彩內容