Life|Life With Vim[0] 批量格式化和去重
晚上想着重新弄一下Urxvt的中文字体。
其实字体文件挺讨人厌的。主要是因为,同一种字体的各种bold
,italic
,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:所定义的字体风格
而其中
字体家族名
是我真正需要的东西:- 首先把字体名晒出来。也就是删掉每行第一个冒号前的和第二个冒号后的所有内容:
:%s/^.*:\(.*\):.*$/\1/g
解释:
:
进入命令模式
%
在整个文档范围内匹配
s/XXX/YYY/g
把所有匹配到的XXX替换成YYY
XXX=
就把原来的条目变成了这样:^.*:\(.*\):.*$
开头的^
是代表行首
.*
代表任意个任意字符
:
代表冒号
\(.*\)
记下这一串匹配到的字符串,也就是在两个冒号之间的任意个任意字符
结尾的$
代表行尾
YYY=\1
调用刚刚被匹配并记录下来的字符串
Source Han Sans K,???,Source Han Sans K ExtraLight,??? ExtraLight
- 然后需要删掉所有的别名只留下一个家族名。因为在调用字体时,别名通常被限定在某种字形上,而通过家族名调用,则相当于调用了所有字形。该粗该细还是该斜体,只需要制定一个家族名,系统会按需选择。又因为家族名都在第一项,别名用逗号隔开。可以按照上面的命令再来一次:
:%s/^\([^,]*\),.*$/\1/g
和上面差不多,只不过在定义XXX的匹配模式的时候用到了
这样条目就只剩下家族名了:[^,]*
。以外匹配除了,
外的任意个所有字符。
因为,*
默认匹配最长的字符串,如果行内不止一个,
它就会默认把后面表达式中的哪个,
匹配到行内最后一个。其实还有别的方法,但是我实在懒得记。
Source Han Sans K
- 因为别名的关系,家族名有很多重复的。所以只需要:
:%sort u
这样,整个个文件就完成去重。所有条目都是唯一的了。系统中有那些中文字体就一目了然。
推荐阅读
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- LeetCode(03)Longest|LeetCode(03)Longest Substring Without Repeating Characters
- performSelectorOnMainThread:withObject:waitUntilDone:参数设置为NO或YES的区别
- 前沿论文|论文精读(Neural Architecture Search without Training)
- ZOMBIES|ZOMBIES WITH RADISH
- 清晨朗读327(How|清晨朗读327:How Successful People Network with Each Other)
- 40
- whole|whole pic make life wonderful
- Supported|Supported orientations has no common orientation with the application 解决方案
- 英语流利说|英语流利说 Level3 Unit3 Part1-Life & Conditions 2