代码之家  ›  专栏  ›  技术社区  ›  Mark Cidade

比例字体IDE

  •  12
  • Mark Cidade  · 技术社区  · 16 年前

    我真的很想看到一个比例字体IDE,即使我必须自己构建它(可能是作为VisualStudio的扩展)。我的基本意思是MS Word风格的代码编辑,有点像 The C++ Programming Language book .

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

    13 回复  |  直到 13 年前
        1
  •  16
  •   Sören Kuklau Keith Boynton    16 年前

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

        2
  •  5
  •   Andreas Scherer    16 年前

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

        3
  •  4
  •   Leon Bambrick jon Z    16 年前

    我原以为你会对这个建议不屑一顾,但这个想法确实有些道理。

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

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

    一个叫 Roedy Green (以他的行为而闻名) how to write unmaintainable code Bali . 它并没有完全包括非比例字体,但它确实包含了非统一字体大小的想法。

    还有这个短 Joel Spolsky post 发布到解决方案时,弹性制表位停止(如另一位评论员所述),这将有助于支持非比例(和可变大小)字体。

        4
  •  3
  •   Scott Stanchfield    16 年前

    @托马斯·欧文斯

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

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

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

    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];
    }
    
        5
  •  2
  •   Scott Stanchfield    16 年前

    @托马斯·欧文斯

    但人们真的会把评论排成一行吗 像那样。。。我从来没有试过 任何事,我唯一去过的地方

    是的,人们会把评论和声明排成一行,诸如此类。格式一致的代码更易于阅读,而易于阅读的代码更易于维护。

        6
  •  2
  •   myplacedk    16 年前

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

    比例字体

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

    设置缩进的制表位

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

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

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

    可以在点而不是固定字符位置中指定。

    对不起,我认为Eclipse在这方面帮不了你。但它是开源的

    粗体和斜体

    Eclipse有这个功能。

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

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

        7
  •  1
  •   Andrew    16 年前

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

        8
  •  1
  •   Thomas Owens    16 年前

    我觉得这很不错。但是人们真的会这样排评论吗?对于我的行末注释,我总是使用单个空格,然后//或/*或等效空格,具体取决于我使用的语言。我从不试图把声明、评论或任何东西排成一行,我唯一见过的地方就是在教科书上。

        9
  •  1
  •   Thomas Owens    16 年前

    @布莱恩·恩辛克:我不觉得这样的代码更容易阅读。

    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
  •  1
  •   pgfearo    13 年前

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

    这真的必须从中看到 video 为了了解这一切(对音乐背景很抱歉)。还有一个轻XML编辑器衍生产品, XMLQuire

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

    enter image description here

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

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

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

        11
  •  0
  •   user371179    14 年前

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

    即:

    iiii_空间_Foo

    将“Foo”排成一行,“i”后面的空格比“x”后面的空格宽得多。

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

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

        12
  •  0
  •   realbart    10 年前

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

    他们的论点是,你看不出x是数组、列表还是其他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;
    • 每周工作时数=38;

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

    • var区域随增长而变化=
      • 选择结果区域;
    • foreach(区域中的var区域随增长)
    • {
      • 写入(区域);
    • }

    你不应该使用行到行的注释,你应该很少需要垂直对齐东西。很少,不是永远。所以我理解你们中的一些人是否喜欢单间距字体。我更喜欢字体Noto Sans或源Sans Pro的可读性。这些字体可从谷歌免费获得,类似Calibri,但设计用于编程,因此具有所有必要的特征:

    • 大:,所以你可以清楚地看到区别
    • 明显不同的0Oo和不同的Il|
        13
  •  -1
  •   jussij    16 年前

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

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

    作为一个例子,考虑这个代码片段:

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

    在单间距字体中 = 大家排好队。

    现在,如果将此文本放入 单词 并使用 比例字体 文本实际上变成了这样:

    注: = ; 不再排队:

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

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

    此外,由于不再保证光标垂直移动(即,从一行到下一行的列数并不总是恒定的),因此编写用于操纵类似外观行的一次性宏脚本变得更加困难。