比例字体IDE

时间:2008-08-18 12:17:12

标签: ide fonts tabs text-editor

我真的很想看到比例字体IDE,即使我必须自己构建它(可能作为Visual Studio的扩展)。我的基本含义是MS Word样式编辑代码,看起来像The C++ Programming Language book中的排版样式。

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

有没有人在那里看到过这样的事情,或者知道开始构建一个这样的最佳方式?

13 个答案:

答案 0 :(得分:16)

我仍然希望看到一个流行的编辑器或IDE工具elastic tabstops

答案 1 :(得分:5)

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

答案 2 :(得分:4)

我希望你能得到降压并接受这个建议,但这个想法有一些真正的意义。

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

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

一个名为Roedy Green的角色(以他的“how to write unmaintainable code”文章而闻名)写了一篇基于Java的理论编辑/语言并称为Bali。它没有完全包含非比例字体,但确实包含了非均匀字体大小的想法。

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

答案 3 :(得分:3)

@Thomas Owens

  

我没有找到更容易阅读的格式化代码。

没关系,这只是个人偏好,我们可以不同意。按照您认为最好的方式对其进行格式化,我会尊重它。我经常问自己'我应该如何格式化这个或那个东西?'我的答案总是将其格式化以提高可读性,我承认这可能是主观的。

关于你的样本,我只想在右侧有一个很好的对齐列,它是左边代码的快速“索引”。话虽如此,我可能会避免评论这样的每一行,因为代码本身不需要那么多解释。如果确实如此,我倾向于在代码上面写一段。

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

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];
}

答案 4 :(得分:2)

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

比例字体IDE

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

为我的缩进设置制表位

在Eclipse中,您可以配置自动缩进,包括将其设置为“仅限制表符”。

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

在Eclipse中,自动缩进可以做到这一点。

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

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

粗体和斜体

Eclipse有这个。

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

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

答案 5 :(得分:2)

@Thomas Owens

  

但人们真的对评论有所了解   像那样? ......我从不尝试   排队声明或评论或   什么,也是我唯一的地方   看到这是在教科书中。

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

答案 6 :(得分:1)

你的问题的缩进部分今天在一个真实的产品中完成,虽然可能甚至比你想象的更高水平的自动化,我提到的产品是XSLT IDE,但相同的格式原则可行使用大多数(但不是全部)传统代码语法。

这真的必须在video中看到才能理解这一切(抱歉音乐回溯)。还有一个简单的XML编辑器衍生产品XMLQuire,作为技术演示者。

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

enter image description here

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

此处未使用比例字体,但它可能非常容易 - 因为缩进设置为TWIPS。编辑体验非常引人注目,因为当您重构代码(在这种情况下为XML)时,可能通过拖放或扩展属性值的长度,缩进只是重新流动以适应 - 没有标签 - 键或“重新格式化”按钮按下。

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

Soeren:IMO,这有点整洁。但是,人们真的会这样评论吗?对于我的行结尾注释,我总是使用单个空格//或/ *或等效,具体取决于我使用的语言。我从不尝试排列声明或评论或其他任何内容,而且我见过的唯一地方就是教科书。

答案 9 :(得分: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

我个人认为第一行比第二行更容易阅读。

答案 10 :(得分: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 regionsWithIncrease =
    • 来自GetRegionalElectionResults()
    • 的结果
    • 其中result.TotalCount&gt;结果&gt; PreviousTotalCount&amp;&amp;
      • result.PreviousTotalCount&gt; 0 //只是新区域
    • 选择result.Region;
  • foreach(RegionsWithIncrease中的var region)
  • {
    • 写(区域);
  • }

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

  • 大:; 。 ,所以你可以清楚地看到差异
  • 明显不同的0Oo和不同的Il |

答案 11 :(得分:0)

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

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

即:

iiii_space_Foo

xxxx_space_Foo

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

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

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

答案 12 :(得分:-1)

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

通过允许轻松执行剪切,复制,粘贴,删除和缩进,unindent等块操作,垂直对齐可以操作跨越多行的矩形代码块。

作为示例,请考虑以下代码片段:

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;

随着垂直对齐的消失,这些漂亮的代码块会逐渐消失。

另外因为游标不再保证垂直移动(即列号从一行到下一行并不总是恒定的),这使得编写丢弃宏脚本更加困难,这些宏脚本旨在操纵类似的外观。