热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

聊聊Monolisa和JetBrainsMono字体在编码中的体验

JetBrainsMono早期一直是JetBrainsMono的使用者,vscode配置如下:settings.json这里使用的是NL无连体版本e

JetBrains Mono

早期一直是 JetBrains Mono 的使用者,vscode 配置如下:

// settings.json// 这里使用的是 NL 无连体版本"editor.fontFamily": "'JetBrains Mono NL','等线'",

JetBrains Mono 是 JB 公司出品的免费等宽字体,也是在 JB 系软件上的默认字体,可谓是最普及的字体之一了,因为免费,所以也特别受欢迎。

用了很久的 JB Mono ,总结好处如下:


  1. 免费,用的人多,是经过实践验证的字体

  2. 字母不会很奇怪,不会有各种飞舞的字形,笔画都恰到好处收住,符合大众口味

  3. 在 vscode 上用 JB mono,切到 JB 系 ide 上编码也一致,日常编码间不会有割裂和不适感

总的来说 JetBrains Mono 是很不错的设计和使用体验。


几款人气字体

再另举几款比较火的字体:


Operator

官网:Operator fonts

很多人喜欢用的一款字体,主打连体的风格,特点是特别贵。


Fira

仓库:tonsky / FiraCode

Fira 系列也是和 JB mono 一个重量级的字体,开源免费。


Dank mono

官网:Dank mono

codesandbox 早期使用的默认字体就是 dank mono ,这款字体给我的感觉是 f 很奇怪,关于 f 的问题也有人声讨过:

Issue: Dank Mono is a bad font!

也有人表示某些奇怪的字形对无障碍不友好:

Issue:[Docs]: Dank Mono is hard to read as someone visually and cognitively impaired

对此作者的评价是有瘦字形的考量,是 dank 的独特风格,详见:

How does everyone feel about the lowercase f?

后来 codesandbox 切到了 monolisa 。


Monolisa

官网:monolisa.dev

近期从 JB mono 切到 monolisa 使用了一段时间,发现了一些 monolisa 的缺点和优点,这里细数一下。


优点


  1. 更宽,不费眼:比常规字体多 7% 的字宽,从很紧凑的 JB mono 切过来几个小时不太习惯,但是半天就真香了,眼睛的消耗效率直线下降,事实证明字宽还是很费眼的,现在已经很难回到 JB Mono 了(会感觉很挤,看不清)。

  2. 字体走形一致: 这是官方的设计理念,也是号称不费眼,对此我的体验并没有太明显,只是觉得刚使用时对长命名更清晰了,比如经常有 ISomeScopeMethodModalProps 这种长接口要写,个人感觉命名越长越有连贯优势。

  3. 持续更新,有保证:官方定期会维护维修 bug ,并且有专门的反馈渠道,加上 codesandbox 这么大的用户群体,有实践验证。

  4. 字形定制,款式多通吃:monolisa 另一个令人吃惊的是支持某些字母的字形修改,比如 0 / g / @ 的多种款式,通吃各种开发者的习惯。


缺点


  1. 紧凑连体有缺陷:因为字形定制(见好处第 4 条)的存在,monolisa 把连体分成了上下两 part,只开上 part 是紧凑字体,会对符号开启紧凑,比如 // 注释字符在一起就没必要占两个字符的位置,自动紧凑一些会让编码体验更好。下 part 是连体。

    这里有问题的就是只开启上 part 后符号字宽变窄,会影响到 vscode 的主题着色,存在一些符号连在一起没着色成功的问题,比如正则内的各种 / / . 字符凑在一起,这个问题有在不断改善,但是还是一个痛点,为了让着色完全正常,只能关掉连体两个 part 了。

    有问题的情况:

    正常的情况:

  2. 定制变体不容易作用到终端:目前 vscode 等编辑器的终端字体都没有开放变体设定,所以要在终端上用定制字形,只能用相关工具自己打一份变体是默认设定的 monolisa 字体,不过这是一个通病。

综合来说 monolisa 的利大于弊,本质上存在的问题还是因为设计的很复杂,因为定制度太高所以衍生了新的小问题。

这里分享一下我的 monolisa 字体设定:

// settings.json"editor.fontFamily": "'MonoLisa','等线'","editor.fontLigatures": "'zero' on, 'ss04' on, 'ss06' on, 'calt' off, 'liga' off",

其中:


  • zero :开启 0 替换,默认中间是点,替换成斜线的 0

  • ss04 :替换 g 到汉语拼音的 g 字形,比较符合习惯

  • ss06 :替换 @ 让他完整一些

  • calt / liga :关闭上下两 part 的连体,关掉上 part (calt)避免上面说的紧凑着色问题,关闭下 part (liga)就是关掉连体。


总结

字体会对编码效率产生影响,这个因人而异,屏幕分辨率越高,字体产生的影响越明显,这里建议在 2k + 或者 retina 屏上再注重字体,分辨率太低的屏往往字体的影响效用不大。

另外字体要入正,否则享受不到迭代,会有无数的 bug 和坑,浪费时间给自己埋雷得不偿失。


推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • 如何使用PyCharm及常用配置详解
    对于一枚pycharm工具的使用新手,正确了解这门工具的配置及其使用,在使用过程中遇到的很多问题也可以迎刃而解,文中有非常详细的介绍, ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 深入解析JMeter中的JSON提取器及其应用
    本文详细介绍了如何在JMeter中使用JSON提取器来获取和处理API响应中的数据。特别是在需要将一个接口返回的数据作为下一个接口的输入时,JSON提取器是一个非常有用的工具。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
author-avatar
情都欧阳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有