我在 SO 上看到了几个字体主题,似乎大多数人使用等宽字体进行编程任务。几年来我一直在使用 Verdana 进行编程,我真的很喜欢增强的可读性,并且不会错过任何与等宽相关的内容。
为什么要使用等宽字体?
我在 SO 上看到了几个字体主题,似乎大多数人使用等宽字体进行编程任务。几年来我一直在使用 Verdana 进行编程,我真的很喜欢增强的可读性,并且不会错过任何与等宽相关的内容。
为什么要使用等宽字体?
在等宽字体中:
Il 0O
我以前从未考虑过使用比例字体进行编码。所以为了科学的利益,我只是换了我的编辑来试一试。
以下是修复几张简单票后的一些观察结果:
!
if (!foo)
{}[]()
vs {}[]())$@%
与 $@% 相比)'"!;:,.
vs '"!;:,.)0Oo iIl
vs 0Oo iIl)不过,也有一些积极的方面。诚然,我只使用了一段时间,但肯定有一些方面在使用比例字体时效果更好:
明天我会再次更新这个答案(假设我能像这样度过一整天!)
我喜欢排列相关的条件句,试图让它们更明显地被分组。例如:
if ((var1 == FOO) && ((var2 == BAR) ||
(var2 == FOOBAR)))
可变宽度字体使这变得更加困难。
我在这里一直看到的一件事是关于“排列代码”和缩进的讨论。我想指出以下几点:
所以把所有这些画在一起,如果你在同一个地方开始每一行,并且一致的间距是相同的宽度,并且标识符不会自发地改变每行的宽度,那么你的代码实际上会排成一行!...直到有什么不同。
例如:
identifier.Method().Property.ToString();
identifier.Method().OtherGuy.ToString(); //how lined up and pretty!
identifier.Method().Sumthing.YouGetThePoint;
我要承认的一点是,非字母数字字符通常不是很宽。这些包括 )(][}{,:|";',`! 和 。然而,这可以在字体编辑器中修复......只需使它们更宽。这不是非等宽固有的问题;只是没有对它的需求不是很多,所以它还没有完成。
总之,个人偏好很好,但我认为没有什么实际理由更喜欢等宽而不是非等宽。你喜欢它的外观吗?当然,做等宽。你想要更多的东西适合你的屏幕吗?去非单声道。但是人们将非等空间视为异端的方式有点夸大其词。
我对这个线程感到好奇,因为等宽字体的许多论点确实可以通过一些调整轻松地反驳。所以我将我的 IDE 切换到了 Calibri(因为它有一个漂亮的圆脸,并且针对 UI 屏幕的可读性进行了优化——完美)。现在我显然必须使用制表符而不是空格来缩进(忽略所有问题),并且 4 个空格宽度显然不够,所以我切换到 10 个。
现在看起来相当不错。但是,我可以发现一些明显的问题。在我测试此设置一段时间后,以后可能会出现更多。
符号不能很好地对齐。例如,考虑以下 C# 代码:
var expr = x => x + 1;
箭头 ( =>
) 看起来像任何等宽字体中的一个单位。它看起来像其他字体中的两个相邻字符。>>
对于诸如etc之类的运算符也是如此。
上下文相关的缩进完全被破坏了:在某些情况下,缩进固定数量的制表符是不够的。采用可能以下列方式缩进的 LINQ 表达式:
var r = from c in "This, apparently, is a test!"
where !char.IsPunctuation(c)
select char.ToUpper(c);
您根本无法使用比例字体来做到这一点。
总而言之,字太窄了。同样,额外的字母间距可能会有所帮助,并且在标点符号的情况下绝对是必要的。然而,我感觉所有这些使比例字体更易读的调整只会自然地模仿等宽字体。到目前为止提到的所有观点都是正确的。
我使用Comic Sans MS,它看起来非常合理,因为它的小点大小(它只是开始在标题大小上看起来“开玩笑”)。它看起来很容易,但仍然保持文本足够小,以便在文本窗口中显示合理数量的代码,同时打开几个 VS 的停靠面板。
您可以打开解决方案资源管理器面板,并且无需水平滚动即可阅读 100 列文本。此外,我可以让 DXCore Documentor 面板(显示格式化的 XMLDOC)打开得足够宽以供阅读,同时仍然能够看到足够的文本来记录 XMLdocs。
只需要几个小时试图弄清楚为什么搜索没有找到某些东西,因为您的文字中有 2 个空格而不是 1 个空格,以意识到您应该使用等宽字体。我曾经在尝试修复 Lotus Notes 代理时遇到过这种情况,当时设计师没有使用等宽字体。直到我将代码粘贴到 CodeWright 中打印出来之后,问题才很明显。
等宽字体使排列代码更容易。
与团队合作时尤其如此;团队中的每个人都可以使用不同的字体,只要它们都是等宽的,一切都会排成一行。同样,如果一个人使用许多不同的开发工具,那么如果它们都是等宽的,那么一切都会排成一行。如果它们不是全等宽的,你必须确保它们都使用相同的字体,如果你在两个平台上开发,那可能会很困难。
事实上,一些开发工具只支持等宽字体。
另一个原因是等宽字体往往具有更多不同的字符。比较 lIiO0lIiO0
和 ,你就会明白我的意思了。它们还使计算空格变得更加容易。
如果你在一个团队中工作,那么等距字体可以确保每个人的代码清晰且布局正确,无论他们喜欢使用哪种等距字体。
使用可变宽度字体时,您的代码可能看起来很清晰,但如果使用等宽字体用户打开它,则看起来不太可能相同。
我怀疑等宽字体是程序员的偏好,作为基于文本的 DOS 时代的遗留物。
另一方面,我自己尝试过 Verdana 和其他一些推荐的比例字体,但我无法应对这种变化。我的眼睛训练得太好了,不适合等宽。重符号的语言,例如:C/C++、C#、Perl 等,对我来说看起来太不一样了。符号的位置使代码看起来完全不同。
由于代码的性质而不是常规语言,最好将其正确排列。此外,在代码编辑中,有时您希望阻止选择、阻止复制和阻止粘贴。在 Visual Studio 中,您可以在进行鼠标选择时使用 ALT 键进行块选择。在不同的编辑器中可能会有所不同,但我一直发现编辑器中的该选项在某些情况下非常重要,而且它不会很好地工作,除非您使用的是等距字体。
我个人发现等宽字体在代码编辑器中更容易阅读。当然,我几乎是瞎子。那可能会有所作为。我目前在 15 点处使用带有高对比度字母的深色背景运行 consolas 字体。
一旦你比一层更深,使用空格进行缩进将是一个问题。
主要用于对齐目的(例如当函数参数声明跨越多行并且您想要将它们对齐或对齐注释等时)。
我认为,就像制表符的问题一样,复杂的因素是为了对齐而缩进某些东西,而其他人有不同的偏好。事情变得错位了。