为什么要在IDE中使用等宽字体?[关闭]


82

我在SO上看过几个字体主题,似乎大多数人在编程任务中使用等宽字体。我使用Verdana进行编程已经有两年了,我真的很喜欢增强的可读性,并且不会丢失任何与等宽线有关的内容。

为什么使用等宽字体?


4
任何人都有充分的理由不使用脚本字体?:)
jammus

1
就个人而言,我喜欢将San Francisco(lowendmac.com/backnforth/2k0601.html)用于我的... :)
John Rudy

我认为Trim在使代码可读方面比Verdana更进一步。(code.google.com/p/i3project/wiki/Fonts
user287424

至少我不是唯一使用Verdana的异端分子。:)
Calmarius 2011年

16
重新打开。了解正确的工作工具/技术及其原因绝对值得讨论。
Thomas Eding 2013年

Answers:


106

在等宽字体中:

  • 等长字符串文字看起来相等。
  • 容易看到像:(){}这样的细标点符号
  • 相似的字符看起来更多不同:Il 0O与 Il 0O
  • 您知道一行是否会缠绕在X个字符宽的窗口上。这意味着您的团队可以标准化100个字符行,并且一行总是看起来像一行

31
第二点和第三点实际上并不是专门针对等距的。这更多是关于您使用哪种特殊字体的问题,而不是它是否为等宽字体。Verdana在这两点上都做得很好(比大多数等宽字体更好,imo),这就是我为什么要使用它的原因
Rik

8
要纠正这些问题,请执行以下操作:等效的字符串看起来宽度相等,并且我质疑您为什么关心不同的字符串并且仅共享长度。非等宽并不意味着标点符号很薄;您应该使用其他非单色字体。“相似”字符在等宽空间中不一定看起来有所不同。例如,SimHei的O等于0。这是字体的属性,而不是宽度。最后,如果您的团队确实进行了标准化,那么您可以选择“非单声道”并进行标准化,“不要让它脱离屏幕”。
bwerks 2010年

103

我以前从未考虑过使用比例字体进行编码。因此,出于科学的利益,我只好切换了编辑器,开始尝试。

修复几个简单的票证后,有一些观察结果:

  • 代码似乎非常密集。我的大部分代码大约有80列,很少超过100列。按比例的字体将其压缩到编辑器左侧的小条上。如果您的屏幕空间不足,则可能会很有用,但它似乎不必要地紧凑。
  • 代码的“纹理”丢失了。很难说出我正在查看哪种结构-这只是一大段文本,几乎需要逐个字符读取。
  • 它的 容易错过!的运营商if (!foo)。(如果(!foo),请参阅!)
  • 标点符号定义很差。许多很难区分({}[]()vs {} []())
  • 一些标点符号比其他标点符号大得多,从而在没有意图的地方标出了重点($@%vs $ @%)
  • 有些角色非常狭窄,很难识别('"!;:,.vs'“!; :: ..)
  • 一些数字和字母非常相似(0Oo iIl vs 0OoIIl)
  • 我是 非常依赖语法高亮显示,如果没有语法高亮显示,几乎不可能完成确认引号是否平衡等工作。
  • 对齐(除了简单的缩进)已完全中断。您可以通过在多余的空格中添加一些翅膀,但是由于字体的比例特性,线条可能无法完全对齐-对齐代码看起来更加混乱
  • 正则表达式很有趣。

这里一些积极点,虽然。诚然,我只使用了一段时间,但是肯定有一些方面在使用比例字体时效果更好:

  • “单词”更容易阅读-拼写错误(例如,拼写错误的变量)对您不利。
  • 对于使用更长,更具描述性的变量名,我会感觉更好(也许是因为它们的扫描效果更好,也许是因为文本的水平大小已压缩)
  • 读取这样的代码似乎稍微容易一些。我的大脑更容易“标记”每个单词并理解其含义。尽管由于标点符号很难阅读,所以仍然很难-但是,可能需要一段时间才能适应,情况可能会有所改变

明天我将再次更新此答案(假设我可以像这样整天完成任务!)


7
不错的工作!我不知道您使用什么字体,因为您对某些字符看起来过于相似的大多数观点根本不会打扰我。
Rik

我从Arial开始,转到Calibri。我尝试了一些其他方法,但基于20秒极其不科学的字体查找以及Konrad Rudolph的推荐,这些方法似乎也是最好的方法。

6
“以前我什至从未考虑过按比例字体编码。因此出于科学的利益,我只好改用了编辑器。” 您从事编程已经习惯了固定宽度多少年了?您在这里有一个不错的答案,但是您无法解释自己的偏见(如果没有更多的工作就很难做到这一点),这并不是一门很好的科学。

2
@罗杰:这可能不是一门好科学(做这样的研究几乎是不可能的,而且非常昂贵!),但是原因似乎是合理的。而且,缩进的缩进是难以克服的参数(在当前的IDE /编辑器中;通过使用与语义匹配的制表位来巧妙地缩进,可以解决此问题)。
康拉德·鲁道夫

5
专为编程设计的比例字体可以解决大多数常见的反对意见。在code.google.com/p/i3project/wiki/Fonts
user287424 2011年

28

我喜欢排队相关的条件,以使它们更加明显。例如:

if ((var1 == FOO) && ((var2 == BAR) ||
                      (var2 == FOOBAR)))

可变宽度字体使此操作更加困难。


2
有效点。但是垂直排列事物存在一个问题:如果您需要在if语句中进行某些更改,该怎么办?您可能需要重新排列所有内容。
2011年

9
@Calmarius:“使其可读”是我整天编码的一部分,我不知不觉地这样做。如果您努力更改代码,则还应努力降低维护成本。
塞巴斯蒂安·马赫

2
更好的方法是弹性制表符,即使您坚持使用等宽字体。并不是说它是当前编辑器中的一种实用替代方法……
Roman Starkov 2012年

1
@endolith好吧,他们肯定比空格聪明... :)您仍然需要确定要与什么对齐的内容;最大的优势是,一旦完成此操作,即使其他事情发生了变化,事情也会保持一致。
罗曼·斯塔科夫

2
@endolith您将在第一行的两个括号之间插入一个制表符,并在第二行的左括号之前插入一个制表符。现在,这将在原始实现中在第1行的两个括号之间添加一些额外的空间,但是您将获得在编辑时保持的对齐方式,这对我来说似乎是一个非常值得的权衡。实际上,我想我甚至在这两行的右括号后面都添加了一个制表符。参见屏幕截图,了解其可变宽度字体的全部优点,或亲自尝试
罗曼·斯塔科夫

20

我在这里一直看到的一件事是“排队代码”和缩进的讨论。我想指出以下几点:

  • 在任何字体中,八个空格将始终是四个空格的两倍。
  • 在任何字体中,两个标签的长度总是一个标签的两倍。
  • 一行中的任何标识符在下一行中的宽度始终相同...使用任何字体!
  • 当然,如果您的队友使用的是等宽字体,而您使用的不是,则看起来会有所不同...但是您应该对某些事物(无论是什么)进行标准化,如果是这样,那么每个人的外观都会相同。 ..任何字体!嘲笑您还可以尝试让每个人都保持空白,并给他们一半的宽屏显示器...看看情况如何。
  • 如果您要进行的操作依赖于根据这些字符在屏幕上的柱状位置而不是所使用的标识符的范围来排列代码,那么我认为您正在做的事情是黑客。标识符绝不应以一定数量的字符为代价,而要牺牲其名称的质量。除此之外...您还没有在代码中绘制带有星号的ASCII框用于注释,是吗?

因此,将所有这些放在一起,如果您在同一位置开始每行,并且一致的间距是相同的宽度,并且标识符不会自发地更改每行的宽度,那么您的代码实际上将对齐!...直到有些不同。

例如:

identifier.Method().Property.ToString();
identifier.Method().OtherGuy.ToString(); //how lined up and pretty!
identifier.Method().Sumthing.YouGetThePoint;
  • identifier.Method()。Property.ToString();
  • identifier.Method()。OtherGuy.ToString(); //不好了!错位!
  • identifier.Method()。Sumthing.YouGetThePoint; //...但谁在乎?它们是不同的属性!

我要承认的一点是,非字母数字字符通常不是很宽。这些包括)(] [} {,: |“;',`!和。然而,可以在字体编辑器中解决此问题……只需将它们变宽即可,这不是非等宽字体固有的问题;只是没有对它的需求不大,所以还没有完成。

总而言之,个人喜好很好,但我认为没有什么实际理由更喜欢等宽而不是非等宽。你喜欢它的外观吗?当然,做等宽的。您想在屏幕上放更多东西吗?去非单声道。但是人们对待异端等异端的方式有些过分了。


3
+1在屏幕上显示更多内容。和ASCII框…………很浪费时间。
Calmarius 2011年

2
+1; 在使用比例字体一段时间之前,实际上很难理解这些要点。
罗曼·斯塔科夫

8
+1代表了广泛的认识,即可以制作专门为编程设计的比例字体,而不必是等宽字体。如果比例字体在编程中更为普遍,那么就会出现“编程字体”的新文化。“异端”思想并非如此。
Timwi

3
您可以在各个点进行全面的假设:1)对齐只需要在行的开头进行,2)多行上类似调用的对齐将始终在同一“ identifier.Method()”对象上,3)列位置与标识符名称有关。4)唯一需要在注释中对齐的时间是“带有星号的ASCII框”。抱歉,-1。
德罗伊

3
我之所以冒犯,不是因为您对我投了反对票,而是因为您没有提出反对意见。您基本上只是背诵了我的观点,对。但是,我同意!对齐只在行不同之前才重要。方法调用与不同参数的对齐方式无关紧要,因为您不应该限制变量名的长度;列位置的确与标识符名称无关;当您沉迷于公司一毛钱的ascii艺术时,唯一需要对齐的时间是。
bwerks

16

我对这个线程感到好奇,因为实际上可以通过一些调整轻松地反驳等宽字体的许多参数。因此,我将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);
    

    您根本无法使用成比例的字体。

总而言之,字符太狭窄。同样,额外的字母间距可能会有所帮助,在标点符号的情况下绝对有必要。但是,我感觉到所有这些使比例字体更具可读性的调整只会模仿自然的等宽字体。到目前为止,对于所有要点来说都是正确的。


1
实际上,Calibri比Arial(我正在测试的)要好一些,尽管它确实仍然存在类似的问题
-Dan,

1
我尝试了几种字体。Calibri和Lucida Sans Unicode似乎是最有可能的候选人。Lucida Sans Unicode(别名为“ Lucida Grande”)是OS X的UI字体,这并非巧合。
Konrad Rudolph

1
是的,实际上这两个很相似。Calibri的标点符号略显清晰,因此对我来说很成功。

可能只是我一个人,但我发现Calibri的间距难以置信地难以预测-有些空间似乎不存在,而另一些空间似乎很大。即使不考虑编程,我也已在使用的每台计算机上将其禁用。
bwerks 2010年

@bwerks:您是什么意思–您“禁用”了它?如果您不喜欢它,那就不要使用它。此外,除了编程之外,什么时候使用间距?要格式化吗?,那是致命的罪过。此外,您观察到的可能只是Microsoft Word的坏行换行算法的效果-因为Calibri的间距始终是相同的:一个空间总是具有相同的宽度。特别是,它不受字距调整的影响。
康拉德·鲁道夫

11

我使用的是Comic Sans MS,它的小字号看起来非常合理(它只是在标题尺寸上看起来像“ jokey”)。视觉上很容易,但仍要保持文本足够小,以便在VS停靠的面板中的几个打开的情况下,在文本窗口中可见合理数量的代码。

您可以显示“解决方案资源管理器”面板,并且仍然可以读取100列文本,而无需水平滚动。此外,我可以使DXCore Documentor面板(显示格式化的XMLDOC)打开得足够宽,以供阅读,同时仍然能够看到足够的文本来为XMLdocs编写文档。


4
天哪 为什么?我很想听听您的辩解!

4
使用comic sans做任何事情:)
丹丹,

4
您的辩解是“很小”?在Comic Sans的所有功能中,很少选择它的“小”字样来代替其他字体。另外,它使您看起来像您12岁。如果我与您一起工作,那么现在我肯定会为此而嘲笑您:)
Dan Dan

5
全麦鲭鱼-我刚刚尝试过,它有效。詹姆斯可能已经发现了存在漫画无圣号的唯一唯一原因-清晰可见至7pt。下次,我必须使用千行方法来重构别人的代码,这是我将使用的字体。
Bevan

7
它可能很可读,但我仍然不会公开承认它:)
patricksweeney

10

如果您在团队中工作,则等宽字体应确保代码清晰并为每个人正确布局,无论他们喜欢使用哪种等宽字体。

使用可变宽度的字体时,您的代码看起来很清晰,但是如果以等宽字体的用户打开它,则看起来不太可能相同。


10

只需要花费几个小时的时间来弄清楚为什么搜索找不到东西,因为您的文字中有2个空格而不是1个空格,因此您应该使用Monospace字体。当设计人员未使用等宽字体时,尝试修复Lotus Notes代理时,我曾发生过这种情况。直到我将代码粘贴到CodeWright中以打印出来,才发现问题出在哪里。


1
使用比例字体时,空间的宽度是恒定的,不是吗?
Calmarius 2011年

6
或者您可以使用具有更大空间的比例字体。相称本身并不会引起您提到的问题。
罗曼·斯塔科夫

10

等宽字体使排队代码更加容易。

与团队合作时尤其如此。团队中的每个人都可以使用不同的字体,只要它们都是等距的,所有内容都将对齐。同样,如果一个人使用许多不同的开发工具,则如果它们都是等距的,那么所有内容都会对齐。如果它们不是全部等宽的,则必须确保它们都使用相同的字体,如果要在两个平台上进行开发,则可能会很困难。

实际上,某些开发工具仅支持等宽字体。

另一个原因是等宽字体倾向于具有更多不同的字符。比较lIiO0与lIiO0,您会明白我的意思。它们还使计数空格变得更加容易。


5
“一切都会排队”-仅在您的团队解决了标签页与空格的“圣战”和/或标签页宽度设置统一的情况下。
罗曼·斯塔科夫

2
即使使用制表符缩进,仍应使用空格进行缩进后对齐。
PeterAllenWebb,2015年

6

我怀疑等距字体是程序员首选,因为它是基于文本的DOS时代的遗留物。

另一方面,我本人也尝试过Verdana和其他一些推荐的比例字体,但是我无法处理更改。我的眼睛太受过训练,无法接受等宽的图像。对于符号而言,诸如C / C ++,C#,Perl等重于符号的语言对我来说看起来太不同了。符号的位置使代码看起来完全不同。


这似乎是真正的答案,我也认为这主要是出于习惯/历史原因,其余仅是代码编辑器的限制或不良字体。
Mikhail

6

根据代码的性质而不是常规语言,正确地排列代码会更好。另外,在代码编辑中,有时您想阻止选择,阻止复制和阻止粘贴。在Visual Studio中,可以在选择鼠标时使用ALT键来进行块选择。在不同的编辑器中可能会有所不同,但是我一直发现在某些情况下编辑器中的选项非常重要,除非您使用的是等宽字体,否则它不会很好地工作。


现在有一个我以前从未知道过的新按键。干杯。
凯夫(Kev)

5

我个人发现等距字体更容易在代码编辑器中阅读。当然,我几乎是盲目的。这可能会有所作为。我目前在15点运行consolas字体,背景为深色且带有高对比度字母。


Consolas实际上是一种等宽字体。那是一个非常好的。我也用它。
Joel Mueller

Mac上的Consolas和Inconsolata +1
the_mandrill

@Joe Mueller-我不知道我是怎么写的。我的意思与我写的相反。让我编辑一下...。:)
约翰·卡夫

我建议您尝试找到一种针对代码优化的良好非等宽字体,并在完全盲目,无罪之前切换到浅色背景,这正是我的经验告诉我的。
Mikhail

2

一旦深度超过一个级别,使用空格进行缩进将是一个问题。


6
实际上,任何体面的IDE都应该能够应对。
瑞克

8
这是使用制表符进行缩进的另一个原因(这是好主首先提供制表符的原因)
James Curran,

5
标签的+1(现在下落不明,辩论正在进行中……)
鲍比·杰克

2

主要用于对齐目的(例如,当函数参数声明跨越多行并且您想要将它们对齐或将注释对齐时,等等)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.