使用Monaco和微软雅黑字体美化cmd和PowerShell

首先来个效果图(卖个关子,本图含有玄机……)

还有这幅图,不知各位读者能否观察出与上图的不同之处:

1. 介绍

话说微软的控制台程序(cmd和Powershell)默认字体十分难看,网上有不少文章讲怎么修改字体。大多数都是通过切换代码页(936到437),然后选择一个在注册表添加的字体。但是中文字体却少有设定的。如果能用微软雅黑做中文字体就好了,但是微软雅黑定义上不是等宽字体,所以没法直接使用。

后来不经意间,我发现了Windows自己有个FontLink功能,也就是说,如果某个字体有不能显示的字符,就用一些备用字体来替换(熟悉Java的同学,记得fontconfig.properties吧)。这些可以在注册表里设置。所以如果是使用Windows字体系统的程序,都可以获得这个功能。如果把一个等宽英文字体的备选字体设为雅黑,那么只要你选择了那个英文字体,如果有中文需要显示,就不会出现框框,而是用雅黑来显示了!

2. 操作

首先到网上搜索“修改cmd字体”,按照教程熟悉怎么设置英文字体(就是在注册表里添加0 00 000这样的键,然后通过修改代码页选择字体)。这时应该达到,英文用你设置的字体显示,而中文还是默认的宋体。如果你想完全照着我做,那么请安装并选择Monaco,这是苹果出的很好看的字体。

然后我们要修改Monaco的FontLink。首先打开regedit,找到

HKLM/Software/Microsoft/Windows NT/CurrentVersion/FontLink/SystemLink

你会发现有很多字体名的键,然后你就明白为什么你选择一个英文字体,但是输入中文的时候仍然可以正常显示了。现在我们需要自己建立一个这样的键,新建字符串键Monaco,然后照下图输入:

 

你可能发现,MSYH.TTF这个字体在其他的键里也有出现(例如Segoe UI),而且有两个,第一个后面带着两个数字(默认是128,96)。但是我设置成了205,154。这是什么意思呢?

一、数字是什么?如果一个英文字体不能显示中文字体,就用它的备选字体来显示,这时用的字号都是一样的。但是中文和英文字号,如果相同的话,实际的大小是不同的,就显得很不和谐。所以要给中文字体一个scaling factor,让相应的字体变大或者变小一些,从而和相应的英文字体配套。

二、为什么要重复一个没有数字的?其实这个FontLink是GDI和GDI+的功能,但是GDI+不能识别后面的数字(其实很多方面GDI+都比GDI弱爆了,嘿嘿)。所以要重复一次,GDI+找不到第一个字体,就用第二个了。

三、我为什么选择一个不一样的值?随便配套两个字体,那个factor怎么选,应该是不同的吧,网上我没找到怎么选这个的资料。我首先用默认的128,96来试,发现效果就是第二张效果图,中文感觉很矮,感觉和英文不在一个水平线上。这种现象我在Emacs里面也看过。在Emacs里面,Monaco和雅黑字号比是1:1.6时,一个中文正好是两个英文的宽度,非常和谐,所以,我就把默认的值都乘以1.6,就出来205,154了。我试过几次,如果太大的话(比如都扩大两倍),就回到了一开始的状态(第二张效果图那样)。所以1.6是个最适当的选择。

因为这是GDI的特性,相当底层,所以设置完要重启系统,然后就看见效果了!

3. 讨论

一开始我说,第一张效果图内含玄机,就是同样的字体,输入时是等宽的,但是cmd反馈的渲染却是不等宽的!可见cmd的字符渲染还有很多问题。有一种可能是输出采用了雅黑字体的非等宽信息,整体比输入时要窄。使用这个设定,在Notepad里雅黑的宽度要稍大于两个英文字符。

其实我们这样设置cmd,其实是绕过了cmd本身一些缺陷的hack。但是cmd现在可以用上很好看的字体组合,所以这点“瑕疵”还是可以容忍的。毕竟雅黑是个含有高级排版信息的非等宽字体啊。如果实在需要,可以把雅黑替换成幼圆。

这个设置还有一个比较好用的地方。例如Vim本身对字体的支持较弱,分别设置字体还要utf-8编码才行,还不支持非等宽字体。所以如果使用FontLink,直接选择Monaco作为字体,一切OK。再比如把记事本字体选为Monaco,中文自然就成了雅黑。

那么是否都以后的字体设置都省了呢?不是。只有使用Windows本身字体渲染功能的软件可以使用这个。像Emacs这种自己动手丰衣足食的,本身对字体支持非常完善,比Windows这点小东西强大得多了去了。Java也是自己渲染字体,虽然有点Buggy(例如Swing显示雅黑粗斜体的时候,居然乱码,但是normal没事;我估计现在还是这样)。

转载于:https://www.cnblogs.com/leading/archive/2013/02/06/make-cmd-and-powershell-prettier-with-monaco-and-yahei-fonts.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Monaco-editor 是一个基于浏览器的代码编辑器,它可以用于在 Web 应用程序中嵌入代码编辑器。使用 Monaco-editor 的方法是将其引入到你的项目中,然后在代码中实例化编辑器对象并将其附加到 DOM 元素上。你可以使用 Monaco-editor 提供的 API 来控制编辑器的行为和外观,例如设置语言、主题、字体大小等。具体使用方法可以参考官方文档。 ### 回答2: 微软Monaco Editor 是一个基于浏览器的代码编辑器,它是 Visual Studio Code 编辑器的核心,并且可以独立地嵌入到其他网页应用程序中。 Monaco Editor 的使用方法如下: 1. 引入 Monaco Editor 的 JavaScript 文件。你可以从官方网站 (https://microsoft.github.io/monaco-editor/index.html) 下载对应的文件,然后将其引入到你的网页中。 2. 创建一个容器元素用于显示编辑器。在你的 HTML 页面中,添加一个具有唯一标识的元素,例如 `<div id="editorContainer"></div>`。 3. 初始化编辑器。在你的 JavaScript 代码中,使用如下代码初始化 Monaco Editor: ```javascript require.config({ paths: { 'vs': 'path/to/monaco-editor/min/vs' }}); require(['vs/editor/editor.main'], function() { var editor = monaco.editor.create(document.getElementById('editorContainer'), { value: "你的代码", // 可选,设置编辑器的初始代码 language: "javascript" // 可选,设置编辑器的语言 }); }); ``` 4. 自定义编辑器的外观和行为。你可以使用编辑器提供的 API 进行自定义操作,例如设置主题、调整字体、添加代码提示等。 5. 获取和设置编辑器中的代码。你可以使用 `getValue()` 方法获取当前编辑器中的代码,并使用 `setValue()` 方法设置代码。 以下是一个简单的例子: HTML 代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Monaco Editor 示例</title> <style> #editorContainer { width: 800px; height: 600px; } </style> </head> <body> <div id="editorContainer"></div> <script src="https://unpkg.com/monaco-editor/min/vs/loader.js"></script> <script> require.config({ paths: { 'vs': 'https://unpkg.com/monaco-editor/min/vs' }}); require(['vs/editor/editor.main'], function() { var editor = monaco.editor.create(document.getElementById('editorContainer'), { value: "console.log('Hello, Monaco Editor!');", language: "javascript" }); }); </script> </body> </html> ``` 这样完成了一个简单的 Monaco Editor 的使用。你可以根据自己的需求进行更多的定制和扩展。 ### 回答3: Monaco Editor 是由微软开发的一款强大的在线代码编辑器,用于在浏览器中编辑和调试不同编程语言的代码。下面是使用 Monaco Editor 的一般步骤: 1. 首先,你需要在你的项目中引入 Monaco Editor。你可以直接从官方网站上下载它的最新版本,然后将其存放在你的项目中。 2. 在你的 HTML 文件中,创建一个用于显示 Monaco Editor 的 `<div>` 元素。在这个元素中,你可以配置编辑器的各种属性,如大小、风格等。 3. 在 JavaScript 文件中,你需要初始化 Monaco Editor。通过调用 `monaco.editor.create` 方法并传入相关的参数(如要显示编辑器的 `<div>` 元素和要编辑的语言类型)。 4. 可以根据需要使用编辑器提供的 API 方法来设置编辑器的行号、自动补全、语法高亮等功能。 5. 可以使用 `editor.getValue()` 方法获取编辑器中的代码内容,或者使用 `editor.setValue()` 方法设置编辑器中的代码。 6. 如果你需要监听编辑器中的事件(如代码更改、光标移动等),可以使用 `editor.onEvent()` 方法来注册监听器,然后在回调函数中处理相关逻辑。 7. 最后,你需要将编辑器显示在你的网页中。可以通过将编辑器元素添加到你的 HTML 文档中的适当位置来实现。 总结:使用 Monaco Editor,你可以在浏览器中创建一个功能丰富的代码编辑器,可以用于编辑和调试不同编程语言的代码。你可以通过初始化编辑器、调用 API 方法和监听编辑器事件等方式来配置和使用 Monaco Editor。希望这些简单的步骤能够帮助你开始使用 Monaco Editor,并且充分发挥其强大的编辑功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值