Ubuntu18.04下vscode、leetcode等宽字体Monaco显示错误(1个字母对应2个空格)的解决方法

一、问题

在windows下用vscode和leetcode都是1个字母对应1个空格,默认情况下1个缩进对应4个空格(即4个英文字符)。转到linux下看着就很不习惯(如下图,因为我已经改好了所以用了原博主的图),这里虽然1个缩进仍等于4个空格,但却只有2个字母的宽度。

二、针对vscode

修改“设置-Font Family”,把’Droid Sans Mono’, ‘monospace’, monospace改为只留下monospace一个或者把monospace放到最前面。
修改前
修改后

三、针对vscode和leetcode

  1. 据原博主分析,造成1个字母对应2个空格的情况的原因是系统自带的中文字体软件包的作者为了简洁起见,直接将整个系统字体全部设为该字体(包括拉丁文字),故解决方案为给系统英文等宽字体一个更高的优先级。(其实原博主的解释我没怎么看懂,但不影响问题的解决)
  2. 安装Monaco。
    (1)下载地址:https://github.com/hbin/top-programming-fonts/raw/master/Monaco-Linux.ttf(或者去谷歌搜How to install the Monaco font)
    (2)在存放Monaco-Linux.ttf的目录下打开终端,依次运行:
sudo mkdir /usr/share/fonts/Monaco
sudo cp Monaco-Linux.ttf /usr/share/fonts/Monaco
cd /usr/share/fonts/Monaco
sudo mkfontscale && sudo mkfontdir && sudo fc-cache -fv
  1. 添加到系统的字体加载顺序中。
    (1)gedit ~/.fonts.conf,新建或修改用户font配置文件,改为Monaco。
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <match>
        <test name="family"><string>sans-serif</string></test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Monaco</string>
        </edit>
    </match>
    <match>
        <test name="family"><string>serif</string></test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Monaco</string>
        </edit>
    </match>
    <match>
        <test name="family"><string>monospace</string></test>
        <edit name="family" mode="prepend" binding="strong">
            <string>Monaco</string>
        </edit>
    </match>
</fontconfig>

(2)sudo gedit /etc/fonts/conf.d/60-latin.conf,对系统的字体加载顺序进行修改,在每一个 <prefer> 后面添加 <family>Monaco</family>。(以下因整洁之故省略了几行)

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
	<alias>
		<family>serif</family>
		<prefer>
			<family>Monaco</family>
			<family>DejaVu Serif</family>
			...省略
		</prefer>
	</alias>
	<alias>
		<family>sans-serif</family>
		<prefer>
			<family>Monaco</family>
			<family>DejaVu Sans</family>
			...省略
		</prefer>
	</alias>
	<alias>
		<family>monospace</family>
		<prefer>
			<family>Monaco</family>
			<family>DejaVu Sans Mono</family>
			...省略
		</prefer>
	</alias>
<!--
  Fantasy faces
 -->
 	<alias>
		<family>fantasy</family>
		<prefer>
			<family>Monaco</family>
			...省略
		</prefer>
	</alias>
<!--
  Cursive faces
  -->
	<alias>
		<family>cursive</family>
		<prefer>
			<family>Monaco</family>
			...省略
		</prefer>
	</alias>

</fontconfig>
  1. 字体渲染修复。
    sudo gedit /etc/fonts/conf.avail/64-language-selector-prefer.conf,里面的代码JP(日语)优先度高于SC(中文),所以将每一个SC代码移动到优先级最高的位置。
    在这里插入图片描述
  2. 其他
    原博主说“linux中文字体很多hint打开但默认中文字体是没有hint的,要把所有字体的hint全部禁用”。我没看懂什么意思,但还是照做了。
    sudo gedit /etc/fonts/local.conf,修改为:
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
    <match target="font">
        <edit name="hintstyle" mode="assign">
            <const>hintnone</const>
        </edit>
    </match>
</fontconfig>
  1. 可能需要重启电脑。结果终于舒服了。
    leetcode:
    在这里插入图片描述
    vscode:
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值