12

我真的很想看到一个比例字体 IDE,即使我必须自己构建它(也许作为 Visual Studio 的扩展)。我的意思是 MS Word 风格的代码编辑,有点像The C++ Programming Language book中的印刷风格。

我想为我的缩进设置制表位并排列函数签名和赋值语句的行,它们可以用点而不是固定的字符位置来指定。我也想要粗体和斜体。各种字体大小甚至样式表都会很酷。

有没有人见过这样的东西,或者知道开始建造一个的最佳方法?

4

13 回答 13

16

我仍然希望看到流行的编辑器或 IDE 实现弹性制表符

于 2008-08-18T12:24:55.987 回答
5

Thinking with Style建议使用您最喜欢的文本处理软件,如 Word 或 Writer。使用丰富的 XML 创建程序代码,并使用 XSLT 提取与编译器相关的部分。“Office”软件将提供所有高级文本处理和格式化功能。

于 2008-10-20T07:05:11.787 回答
4

我希望你会因为这个建议而被修改并选择,但这个想法有一些真正的意义。

代码编辑器中传统的“非比例”字体要求的主要优点是减轻了执行代码格式化的负担。

但是对于现代 IDE 中出现的所有交互式自动格式化,比例字体确实有可能提高代码的可读性(而不是像我相信许多纯粹主义者所期望的那样妨碍它)。

一个名叫Roedy Green的人物(以他的“如何编写不可维护的代码”文章而闻名)写了关于一种基于 Java 的理论编辑器/语言,称为Bali。它并没有完全包含非比例字体,但它确实包含了具有非统一字体大小的想法。

此外,这个简短的 Joel Spolsky 帖子发布到一个解决方案,弹性制表位(正如另一位评论员所提到的),这将有助于支持非比例(和可变大小)字体。

于 2008-08-18T12:26:12.740 回答
3

@托马斯欧文斯

我没有发现这样格式的代码更容易阅读。

没关系,这只是个人喜好,我们可以不同意。以您认为最好的方式格式化它,我会尊重它。我经常问自己“我应该如何格式化这个或那个东西?” 我的回答总是格式化它以提高可读性,我承认这可能是主观的。

关于您的示例,我只是喜欢在右侧有一个对齐良好的列,它是左侧代码中的一种快速“索引”。话虽如此,我可能会避免像那样评论每一行,因为代码本身不需要那么多解释。如果是这样,我倾向于在代码上方写一段。

但是考虑一下原始海报中的这个例子。在我看来,更容易发现第二个中的评论。

for (size-type i = 0; i<v.size(); i++) { // rehash:
    size-type ii = has(v[i].key)%b.size9); // hash
    v[i].next = b[ii]; // link
    b[ii] = &v[i];
}

for (size-type i = 0; i<v.size(); i++) {     // rehash:
    size-type ii = has(v[i].key)%b.size9);   // hash
    v[i].next = b[ii];                       // link
    b[ii] = &v[i];
}
于 2008-08-18T15:00:02.947 回答
2

@托马斯欧文斯

但人们真的会这样排列评论吗?......我从不尝试排列声明或评论或任何东西,我见过的唯一地方是教科书。

是的,人们确实会排列评论和声明以及各种各样的事情。格式一致的代码更易于阅读,更易于阅读的代码更易于维护。

于 2008-08-18T13:24:39.847 回答
2

我想知道为什么没有人真正回答您的问题,以及为什么接受的答案与您的问题没有任何关系。但无论如何...

比例字体IDE

在 Eclipse 中,您可以选择系统上的任何字体。

为我的缩进设置制表位

在 Eclipse 中,您可以配置自动缩进,包括将其设置为“仅选项卡”。

排列函数签名和赋值语句行

在 Eclipse 中,自动缩进就是这样做的。

可以用点而不是固定的字符位置来指定。

对不起,我不认为 Eclipse 可以帮助你。但它是开源的。;-)

粗体和斜体

Eclipse 有。

各种字体大小甚至样式表都会很酷

我认为 Eclipse 只为每种文件类型(例如 Java 源文件)使用一种字体和字体大小,但是对于不同的文件类型,您可以有不同的“样式表”。

于 2008-10-20T08:12:04.273 回答
1

当我上次查看 Eclipse 时(不久前!),它允许您选择任何已安装的字体来工作。不太确定它是否支持使用制表位缩进的概念。

它看起来很酷,但代码肯定更难阅读......

于 2008-08-18T12:21:23.343 回答
1

Soeren:这很好,IMO。但人们真的会这样排列评论吗?对于我的行尾注释,我总是使用一个空格,然后是 // 或 /* 或等效项,具体取决于我使用的语言。我从不尝试排列声明或评论或任何东西,我见过的唯一地方就是教科书。

于 2008-08-18T12:27:56.277 回答
1

@Brian Ensink:我不觉得这样的代码更容易阅读。

int var1 = 1 //Comment
int longerVar = 2 //Comment
int anotherVar = 4 //Command

相对

int var2       = 1 //Comment
int longerVar  = 2 //Comment
int anotherVar = 4 //Comment

我个人觉得第一行比第二行更容易阅读。

于 2008-08-18T13:27:14.647 回答
1

您问题的缩进部分今天正在一个真实的产品中完成,尽管可能比您想象的自动化程度更高,我提到的产品是XSLT IDE,但相同的格式原则适用于大多数(但不是全部) 常规代码语法。

这真的必须在视频中看到才能了解这一切(对不起音乐回溯)。还有一个轻量级的 XML 编辑器衍生产品XMLQuire用作技术演示器。

下面的屏幕截图显示了在此 XSLT IDE 中使用非常复杂的格式规则格式化的 XML,其中所有缩进都是以字处理器样式执行的,使用左边距 - 而不是空格或制表符。

在此处输入图像描述

为了强调这种格式概念,所有字符都被突出显示以显示左边距延伸的位置以保持缩进。我使用术语虚拟格式来描述这一点 - 它不像弹性制表位,因为根本没有制表符,只有作为“段落”格式一部分的边距信息(此处使用 RTF 代码)。解析器在与语法着色相同的过程中不断地重新格式化。

这里没有使用比例字体,但它可能很容易 - 因为缩进是在 TWIPS 中设置的。编辑体验非常引人注目,因为当您重构代码(在本例中为 XML)时,可能通过拖放,或通过扩展属性值的长度,缩进只会重新排列以适应 - 没有制表符 -键或“重新格式化”按钮按下。

所以,缩进是存在的,但字体工作是一个更复杂的问题。我已经对此进行了试验,但发现如果在您键入时重新选择字体,代码的水平移动太分散注意力 - 可能需要用户启动的“格式字体”命令。该产品还内置了用于注释代码的 Ink/Handwriting 技术,但我还没有在实时版本中利用这一点。

于 2011-09-12T20:47:10.847 回答
0

人们都在抱怨评论没有排队。

在我看来,有一个非常简单的解决方案:将单位空间定义为字体中最宽的字符。现在,按比例间隔除空格以外的所有字符。该空间占用了尽可能多的空间,以便将下一个字符排列在该行上所有前面的字符都是字体中最宽的位置。

IE:

iii_space_Foo

xxxx_space_Foo

将排列“Foo”,“i”之后的空间比“x”之后的空间宽得多。

所以称之为弹性空间。而不是制表位。

如果你是一个聪明的编辑,特别对待评论,但这只是肉汁

于 2010-06-19T19:04:24.307 回答
0

让我回忆一下关于在 C# 中使用 'var' 关键字的论点。人们讨厌它,并认为它会使代码变得不那么清晰。例如,您无法知道以下内容的类型:

var x = GetResults("Main");
foreach(var y in x)
{
   WriteResult(x);
}

他们的论点是,您看不到 x 是数组、List 还是任何其他 IEnumerable。或者 y 的类型是什么。在我看来,不清楚不是来自使用 var,而是来自选择不明确的变量名。为什么不直接输入:

var electionResults = GetRegionalElactionResults("Main");
foreach(var result in electionResults)
{
   Write(result); // you can see what you're writing!!
}

“但你仍然看不到选举结果的类型!” - 真的有关系吗?如果要更改 GetRegionalElectionResults 的返回类型,可以这样做。任何 IEnumerable 都可以。

快进到现在。人们希望在类似的代码中对齐注释:

int var2       =  1; //The number of days since startup, including the first
int longerVar  =  2; //The number of free days per week
int anotherVar = 38; //The number of working hours per week

因此,如果没有评论,一切都不清楚。而且,如果您不对齐值,则无法将它们与变量分开。但是你呢?这个怎么样(请忽略子弹)

  • int daysSinceStartup = 1; // 包括第一个
  • int freeDaysPerWeek = 2;
  • int workingHoursPerWeek = 38;

如果您需要对每一行发表评论,那您就做错了。“但你仍然需要调整价值观”——是吗?38和2有什么关系?

在 C# 中,大多数代码块只需使用制表符(或者实际上是四个空格的倍数)即可轻松对齐:

  • var regionWithIncrease =
    • 来自 GetRegionalElectionResults() 的结果
    • 其中 result.TotalCount > 结果 > PreviousTotalCount &&
      • result.PreviousTotalCount > 0 // 只是新区域
    • 选择结果。区域;
  • foreach(regionsWithIncrease 中的 var 区域)
  • {
    • 写(区域);
  • }

你永远不应该使用逐行注释,并且你应该很少需要垂直对齐的东西。很少,不是从来没有。所以我理解你们中的一些人是否更喜欢等宽字体。我更喜欢字体 Noto Sans 或 Source Sans Pro 的可读性。这些字体可从 Google 免费获得,类似于 Calibri,但专为编程而设计,因此具有所有必要的特征:

  • 大的 : ; . ,所以你可以清楚地看到区别
  • 明显不同的 0Oo 和不同的 Il|
于 2014-09-02T22:36:24.707 回答
-1

比例字体的主要问题是它们破坏了代码的垂直对齐方式,这在编写代码时是一个相当大的损失。

垂直对齐使得通过允许轻松执行块操作(如剪切、复制、粘贴、删除和缩进、取消缩进等)来操作跨越多行的矩形代码块成为可能。

例如,考虑以下代码片段:

a1 = a111;
B2 = aaaa;
c3 = AAAA;
w4 = wwWW;
W4 = WWWW;

在等宽字体中=; 都排队。

现在,如果将此文本加载到Word中并使用比例字体显示,则文本实际上会变成:

注意:添加了额外的空白以显示=; 不再排队:

a1 = a1 1 1;
B2  = aaaa;
c3 = A A A A;
w4 = w w W  W;
W4  = W W W  W;

随着垂直对齐的消失,那些漂亮的代码块实际上消失了。

此外,由于不再保证光标垂直移动(即,列号从一行到下一行并不总是恒定的),这使得编写用于操作相似外观行的丢弃宏脚本变得更加困难。

于 2008-10-20T07:46:28.660 回答