我真的很想看到比例字体IDE,即使我必须自己构建它(可能作为Visual Studio的扩展)。我的基本含义是MS Word样式编辑代码,看起来像The C++ Programming Language book中的排版样式。
我想为我的缩进设置制表位,并排列函数签名和赋值语句行,这些可以用点而不是固定字符位置指定。我也想大胆和斜体。各种字体大小甚至样式表都很酷。
有没有人在那里看到过这样的事情,或者知道开始构建一个这样的最佳方式?
答案 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)
@Thomas Owens
但人们真的对评论有所了解 像那样? ......我从不尝试 排队声明或评论或 什么,也是我唯一的地方 看到这是在教科书中。
是的,人们会排列评论和声明以及各种各样的事情。始终如一的格式良好的代码更易于阅读,易于阅读的代码更易于维护。
答案 5 :(得分:2)
我想知道为什么没有人真正回答你的问题,为什么接受的答案与你的问题没有任何关系。但无论如何......
比例字体IDE
在Eclipse中,您可以选择系统中的任何字体。
为我的缩进设置制表位
在Eclipse中,您可以配置自动缩进,包括将其设置为“仅限制表符”。
排列函数签名和赋值语句行
在Eclipse中,自动缩进可以做到这一点。
可以用点数而不是固定字符位置指定。
对不起,我认为Eclipse不能帮助你。但它是开源的。 ; - )
粗体和斜体
Eclipse有这个。
各种字体大小甚至样式表都很酷
我认为Eclipse只为每种文件类型使用一种字体和字体大小(例如Java源文件),但是对于不同的文件类型,您可以使用不同的“样式表”。
答案 6 :(得分:1)
当我上次看Eclipse时(不久前现在!),它允许您选择任何已安装的字体。不确定它是否支持使用制表位缩进的概念。
看起来很酷,但代码肯定难以阅读......
答案 7 :(得分:1)
答案 8 :(得分: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
我个人认为第一行比第二行更容易阅读。
答案 9 :(得分:1)
你的问题的缩进部分今天在一个真实的产品中完成,虽然可能甚至比你想象的更高水平的自动化,我提到的产品是XSLT IDE,但相同的格式原则可行使用大多数(但不是全部)传统代码语法。
这真的必须在video中看到才能理解这一切(抱歉音乐回溯)。还有一个简单的XML编辑器衍生产品XMLQuire,作为技术演示者。
下面的屏幕截图显示了在此XSLT IDE中使用非常复杂的格式规则格式化的XML,其中所有缩进都使用左边距执行文字处理器样式 - 而不是空格或制表符。
为了强调这种格式化概念,所有字符都已突出显示,以显示左边距延伸以保持缩进的位置。我使用术语虚拟格式来描述它 - 它不像弹性制表位,因为根本没有制表符,只是边距信息是“段落”格式的一部分(这里使用RTF代码) 。解析器在与语法着色相同的过程中连续重新格式化。
此处未使用比例字体,但它可能非常容易 - 因为缩进设置为TWIPS。编辑体验非常引人注目,因为当您重构代码(在这种情况下为XML)时,可能通过拖放或扩展属性值的长度,缩进只是重新流动以适应 - 没有标签 - 键或“重新格式化”按钮按下。
因此,缩进就在那里,但字体工作是一个更复杂的问题。我已经对此进行了实验,但发现如果在键入时重新选择字体,代码的水平移位会分散注意力 - 可能需要用户启动的“格式字体”命令。该产品还内置了用于注释代码的墨水/手写技术,但我还没有在实时版本中利用它。
答案 10 :(得分:0)
人们都在抱怨没有排队的评论。
对我来说,有一个非常简单的解决方案:将单位空间定义为字体中最宽的字符。现在,按比例间隔除空格之外的所有字符。空间占用尽可能多的空间,以便排列下一个字符,如果行中所有前面的字符都是字体中最宽的字符。
即:
iiii_space_Foo
xxxx_space_Foo
将排列“Foo”,“i”之后的空格比“x”之后的空间宽。
所以称之为弹性空间。而不是制表符。
如果你是一个聪明的编辑,请特别对待评论,但那只是肉汁
答案 11 :(得分: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
所以没有评论,一切都不清楚。如果你没有对齐值,你就不能将它们从变量中分离出来。但是你呢?怎么样(请忽略子弹)
如果你需要评论每一行,你做错了什么。 “但你仍然需要调整价值观” - 你呢? 38与2有什么关系?
在C#中,大多数代码块只能使用制表符(或者实际上是四个空格的倍数)轻松对齐:
你永远不应该使用行到行注释,你应该很少需要垂直对齐。很少,从来没有。所以我理解你们中的一些人是否更喜欢等宽字体。我更喜欢字体Noto Sans或Source Sans Pro的可读性。这些字体可以从Google免费获得,类似于Calibri,但是专为编程而设计,因此具有所有必要的特性:
答案 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;
随着垂直对齐的消失,这些漂亮的代码块会逐渐消失。
另外因为游标不再保证垂直移动(即列号从一行到下一行并不总是恒定的),这使得编写丢弃宏脚本更加困难,这些宏脚本旨在操纵类似的外观。