为什么在您的IDE中使用等宽字体?

我已经看到了几个字体的主题,似乎大多数人使用等宽字体进行编程任务。 我一直在使用Verdana编程几年,我真的很喜欢增强的可读性,没有丢失任何相关的等宽字体。

为什么使用等宽字体?

在等宽字体中:

  • 等长的string文字看起来是平等的。
  • 很容易看到如下的标点符号:(){}
  • 相似的字符看起来更加不同:IlOO与Il 0O
  • 您知道一行是否会在X个字符的窗口上换行。 这意味着您的团队可以标准化为100个字符行,并且一条线总是看起来像一条线

我从来没有考虑过以比例字体编码。 所以,为了科学的利益,我只是把我的编辑转到了一边。

修复了几张简单的门票后,下面是一些观察:

  • 代码看起来非常密集。 我的大部分代码大约80列,很less超过100个。比例字体压缩到我的编辑器左侧的一个小条。 也许有用,如果你是短的屏幕空间,但似乎不必要的紧凑。
  • 代码的“纹理”丢失了。 很难说出我在看什么样的结构 – 这只是一大块文字,需要逐字逐字阅读。
  • 容易错过! 运算符在if (!foo) 。 (如果(!foo),请参阅!)
  • 标点符号的定义非常糟糕。 很多很难区分( {}[]() vs {} []())
  • 一些标点符号比其他标点符号大得多,推断出没有意图的重点( $@% vs $ @%)
  • 有些angular色窄,很难识别( '"!;:,. vs'“!;:,。)
  • 一些数字和字母是非常相似的( 0Oo iIl vs 0OiIlI)
  • 非常依赖语法突出显示,没有它几乎不可能做像确认引号是平衡的等等。
  • alignment(除了简单的缩进)被完全打破。 你可以通过添加额外的空格来实现它,但是由于字体的比例性质,这些行可能不完全一致 – 代码看起来更加混乱
  • 正则expression式是有趣的!

虽然一些积极的一面。 无可否认,我只使用了一段时间,但肯定有一些方面比例字体更好一些:

  • “单词”更容易阅读 – 拼写错误(例如,错误地拼写variables)会跳出来。
  • 我更喜欢使用更长,更具描述性的variables名称(也许是因为它们扫描得更好,也许是因为文本的水平大小被压缩了)
  • 阅读这样的代码似乎稍微容易一些。 让我的大脑更容易“标记”每个单词并理解它的意思。 虽然由于标点字符难以阅读,但仍然很难 – 但也许这将改变一些时间来适应它

我会在明天再次更新这个答案(假设我可以像这样完成一整天)

我想排列相关的条件,试图使它们更加明显,它们被分组。 例如:

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

可变宽度的字体使这变得更加困难。

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

  • 八个空格总是两倍于任何字体的四个空格。
  • 两个标签总是是任何字体的一个标签的两倍。
  • 任何字体上的任何标识符在下一行将始终是相同的宽度!
  • 当然,如果你的队友使用的是等宽空间,而你不是这样的话,那看起来就不一样了,但是你应该对某些东西进行标准化 – 不pipe它是什么 – 如果那是真的,那么对每个人来说都是一样的。 ..在任何字体! 对于笑,你也可以尝试保持每个人都等宽,并给他们一半的宽屏显示器…看看是怎么回事。
  • 如果你正在做任何依靠屏幕上那些字符的柱状位置来排列代码的事情,而不是你使用的标识符的范围,那么我认为你所做的只是一种破解。 标识符不应该以其名字的质量为代价被限制在一定数量的字符上。 除此之外,你还没有在你的代码中用星号画出带有星号的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。 //…但谁在乎? 他们是不同的属性!

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

总之,个人喜好是好的,但我认为没有什么实际的理由喜欢等宽的非等宽。 你喜欢它的外观? 当然,做等宽。 你想要更多的东西适合你的屏幕? 去非单声道。 但是人们对待像异端邪说这样的非等距的方式有点过分了。

我对这个主题感到好奇,因为很多关于等宽字体的论据可以通过一些调整来轻易地被反驳。 所以我把我的IDE切换到了Calibri(因为它有一个很好的圆脸,并且为UI的屏幕上的可读性进行了优化 – 完美)。 现在我显然必须使用制表符而不是空格来缩进(忽略所有的问题),而4个空格宽度显然是不够的,所以我切换到了10个。

现在看起来不错。 但是,我可以发现一些明显的问题。 稍后我会testing一下这个设置。

  • 如前所述,一些字符(特别是括号,分号)看起来太薄。 我想在连续的文本,但不是在源代码中。 我认为这将是最大的问题。
  • 符号不alignment。 作为一个例子,考虑下面的C#代码:

     var expr = x => x + 1; 

    箭头( => )看起来像是任何等宽字体的单位。 它看起来像其他字体中的两个相邻的字符。 像>>等操作符也是如此

  • 空间看起来很小。 我大力使用我的源代码来提高可读性。 切换到比例字体时,这是无用的。 如果我能控制空间的宽度,这肯定会有所帮助。
  • 上下文敏感的缩进被完全打破:在某些情况下,缩进固定数量的制表符是不够的。 以下面的方式缩进LINQexpression式:

     var r = from c in "This, apparently, is a test!" where !char.IsPunctuation(c) select char.ToUpper(c); 

    你根本不能用比例字体做到这一点。

总而言之,人物太狭窄了。 再一次,额外的字母间距可能会有所帮助,而且对于性能来说这绝对是必要的。 不过,我有这样的感觉,所有这些调整,使比例字体更具可读性,只是模仿自然的等宽字体。 迄今为止提到的所有问题都是如此。

如果你在一个团队工作,那么单间隔字体可以确保代码清晰,并且适合每个人,不pipe他们喜欢使用哪种单间隔字体。

使用可变宽度的字体时,您的代码可能会看起来很清晰,但如果单隔开的字体用户将其打开,则看起来不太可能相同。

我使用Comic Sans MS,它看起来相当合理,因为它的尺寸很小(它只能在标题尺寸上看起来“jokey”)。 在眼睛上很容易,但仍然保持足够小的文本,以便在文本窗口中显示合理数量的代码,同时打开几个VS的停靠面板。

您可以拥有“解决scheme资源pipe理器”面板,并且仍然有100列文本可以阅读,而无需进行水平滚动。 移动,我可以打开DXCore文档面板(显示格式化的XMLDOCs)足够宽的阅读,同时仍然能够看到足够的文本XMLdocs。

所需要的只是几个小时,试图找出为什么search没有find一些东西,因为你的文字中有2个空格而不是1个,意识到你应该使用等宽字体。 当devise者没有使用等宽字体的时候,当我试图修复Lotus Notes代理时,曾遇到过这种情况。 直到我将代码粘贴到CodeWright上打印出来,这显然是问题所在。

等宽字体使排列代码变得更容易。

与团队合作时尤其如此; 团队中的每个人都可以使用不同的字体,只要他们都是等宽字体,一切都会排成一列。 同样,如果一个人使用了许多不同的开发工具,如果他们都是等宽的,所有东西都会排成一列。 如果它们不是全部等宽的,那么你必须确保它们都使用相同的字体,如果你在两个平台上开发,这可能是困难的。

事实上,一些开发工具只支持等宽字体。

另一个原因是等宽字体往往有更明显的字符。 比较lIiO0和lIiO0 ,你会明白我的意思。 它们也使得计算空白变得容易得多。

我怀疑等宽字体是程序员的偏好,作为基于文本的DOS时代的延续。

另一方面,我自己也尝试过Verdana,还有一些人推荐了比例字体,但我无法处理这个变化。 我的眼睛对于等宽空间训练得太好了。 语言沉重的符号,如:C / C + +,C#,Perl等,看起来太不同了。 符号的位置使代码看起来完全不同。

由于代码的性质,而不是一般的语言,它正确排列更好。 另外,在代码编辑中,有时候你想要阻止select,块复制和块粘贴。 在Visual Studio中,您可以在select鼠标的同时使用ALT键进行块select。 在不同的编辑器中可能会有所不同,但是在某些情况下,我总是发现编辑器中的选项非常重要,除非使用单音字体,否则它将无法正常工作。

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

一旦你得到比一个级别更深的位置,使用空格缩进将会成为一个问题。

主要是为了alignment的目的(例如,当函数参数声明跨越多行,你想排队,或排队注释等)。

我认为,就像制表符的问题一样,复杂的因素是当为了排列的目的而缩进某些东西时,其他人有不同的偏好。 事情变得不对劲。