14
代码编辑器如何在不使用缩进的情况下有效地提示代码嵌套级别?[关闭]
我已经编写了一个XML文本编辑器,该编辑器为相同的XML文本提供2个视图选项,其中一个缩进(虚拟),另一个向左对齐。左对齐视图的动机是帮助用户“看到”用于纯文本或XPath代码缩进的空白字符,而不会受到作为XML上下文的自动副作用的缩进的干扰。 我想为左对齐模式提供视觉线索(在编辑器的不可编辑部分),这将对用户有所帮助,但又不会太复杂。 我尝试仅使用连接线,但是似乎太忙了。到目前为止,我所提出的最好的结果显示在下面的编辑器的模拟屏幕快照中,但是我正在寻找更好/更简单的替代方法(不需要太多的代码)。 [编辑] 以热图的想法(来自:@jimp),我得到了这个和3个替代方案-分别标记为a,b和c: 下一节将接受的答案描述为一个建议,将其他答案和评论中的想法汇集在一起。由于此问题现在是社区Wiki,请随时进行更新。 NestView 这个想法的名称提供了一种直观的方法,可以在不使用缩进的情况下提高嵌套代码的可读性。 等高线 NestView中不同阴影线的名称 上图显示了NestView,用于帮助可视化XML代码段。尽管XML用于此插图,但使用嵌套的任何其他代码语法也可以用于此插图。 概述: 等高线被着色(如在热图中)以传达嵌套水平 等高线倾斜以显示何时打开或关闭嵌套层。 等高线将嵌套层的起点链接到相应的终点。 除了热图之外,轮廓线的组合宽度还给人以嵌套层次的视觉印象。 NestView的宽度可以手动调整大小,但不应随代码更改而改变。轮廓线可以压缩或截断以保持这一点。 有时使用空行代码将文本分解为更多可消化的块。这些行可能会在NestView中触发特殊行为。例如,可以重设热图或使用背景色轮廓线,或同时使用两者。 与当前所选代码关联的一条或多条轮廓线可以突出显示。与所选代码级别关联的轮廓线将得到最大程度的强调,但其他轮廓线也可以“亮起”,以帮助突出显示包含嵌套的组 可以在轮廓线上单击/双击不同的行为(例如代码折叠或代码选择)。 等高线的不同部分(前缘,中间或后缘)可能具有不同的动态行为。 可以在轮廓线上方的鼠标悬停事件上显示工具提示 随着代码的编辑,NestView会不断更新。在嵌套不均衡的地方,可以假设嵌套层应该在哪里结束,但是必须以某种方式突出显示关联的临时轮廓线,以作为警告。 可以支持轮廓线的拖放行为。行为可能会随所拖动的轮廓线的部分而变化。 通常在左边距中发现的功能(例如行号和错误的颜色突出显示以及更改状态)可以覆盖NestView。 附加功能 该提案解决了一系列其他问题-许多问题超出了原始问题的范围,但产生了有益的副作用。 可视地链接嵌套区域的开始和结束 等高线连接每个嵌套层的起点和终点 突出显示当前选定行的上下文 选择代码后,可以突出显示NestView中关联的嵌套级别 区分同一嵌套级别的代码区域 对于XML,可以将不同的颜色用于不同的名称空间。编程语言(例如c#)支持可以以类似方式使用的命名区域。 将嵌套区域内的区域划分为不同的可视块 通常在代码中插入多余的行以提高可读性。这样的空线可用于重置NestView等高线的饱和度。 多列代码视图 没有缩进的代码使使用多列视图更加有效,因为不太需要自动换行或水平滚动。在此视图中,一旦代码到达一列的底部,它将流入下一列: 用途不仅仅提供视觉帮助 正如概述中所建议的那样,NestView 可以提供一系列的编辑和选择功能,这些功能与TreeView控件的预期大致相符。关键区别在于,典型的TreeView节点分为两部分:扩展器和节点图标。NestView等高线最多可以包含3个部分:打开器(倾斜),连接器(垂直)和闭合(倾斜)。 压痕 与非缩进代码一起显示的NestView是对传统缩进代码视图的补充,但不太可能替代。 任何采用NestView的解决方案都可能会提供一种在缩进和非缩进代码视图之间无缝切换而又不影响任何代码文本本身(包括空格字符)的方法。缩进视图的一种技术是“虚拟格式设置”-使用动态左边界代替制表符或空格字符。用于动态呈现NestView的相同嵌套级数据也可以用于外观更传统的缩进视图。 列印 缩进对于打印代码的可读性很重要。在这里,没有制表符/空格字符和动态的左边距意味着文本可以在右边距处换行并仍然保持缩进视图的完整性。行号可用作可视标记,用于指示代码在何处换行以及缩进的确切位置: 屏幕真实状态:缩进与缩进 解决NestView是否用完宝贵的屏幕房地产的问题: 轮廓线的宽度与代码编辑器的字符宽度相同时,效果很好。因此,在轮廓线被截断/压缩之前,NestView宽度为12个字符的宽度可以容纳12个嵌套级别。 如果缩进视图的每个嵌套级别使用3个字符宽度,则将保留空间,直到嵌套达到4个嵌套级别为止。在此嵌套级别之后,平面视图具有节省空间的优点,该优势随每个嵌套级别而增加。 注意:对于代码,通常建议最小缩进4个字符的宽度,但是XML经常使用较少的字符。此外,虚拟格式化允许使用更少的缩进,因为没有对齐问题的风险 …