为什么文本编辑器有长线问题?

rpo*_*dic 7 editor

如果你复制我在下面提供的链接并将其粘贴到文本编辑器中的文本(我试过几个的:gedit,notepad,phpstorm,还命令行编辑器一样nano),你会遇到困难.

http://pastebin.com/5dqT7mFm

以下是我在测试中发现的一些内容:

  • 非常奇怪的文字渲染效果
  • 文本选择不再可能
  • CPU消耗量大
  • 编辑停止响应(有时他们甚至崩溃)

我还注意到,如果我在相应的文本编辑器中启用了该功能,那么这些问题就不会发生text-wrap.

我想知道的是,为什么文本编辑器有这么长的问题呢?这种行为有合理的解释吗?

jus*_*sij 5

我想知道的是,为什么文本编辑器有这么长的问题呢?这种行为有合理的解释吗?

我是Zeus IDE的作者,所以我会考虑为什么会出现这种情况.

一个主要原因是制表符的存在.让我解释.

因为文本编辑器必须假定该行可能包含制表符,所以它能够正确处理这些制表符的唯一方法是从左到右解析该行,始终从该行的第一个字符开始.

要理解原因,请考虑以下两行代码,其中^表示制表符:

This is line one with no tables
This line has a ^ tab character
Run Code Online (Sandbox Code Playgroud)

如果选项卡大小为8,则需要像这样绘制:

This is line one with no tables
This line has a          tab character
Run Code Online (Sandbox Code Playgroud)

如果标签大小为4,它将绘制如下:

This is line one with no tables
This line has a     tab character
Run Code Online (Sandbox Code Playgroud)

但是这两行的长度完全相同,只有31个字符.

因此,要正确绘制线,编辑器必须从左到右解析该行,始终从该行的第一个字符开始.

当然,对于长线来说,这种绘图可能很慢.

现在考虑第二种情况,其中| character表示光标:

This is line one with no |tables
This line has a          tab character
Run Code Online (Sandbox Code Playgroud)

在上面的情况下,光标位于行中的索引位置25,这也表示屏幕上的光标位置25(因为该行不包含制表符).

现在让我们假设用户将光标向下移动一行,如下所示:

This is line one with no tables
This line has a          |tab character
Run Code Online (Sandbox Code Playgroud)

现在光标仍处于光标屏幕位置25,但由于8字符选项卡代表该行的索引18位置.

为了弄清楚这一点,编辑器需要在行上运行计算检查沿途的标签,再次对于长行,这需要时间.

这些只是游标索引的两个例子,光标到索引映射需要由编辑器完成.

键盘事件,鼠标点击,文本标记,文本剪切/复制和粘贴等也需要相同的计算.

我还注意到,如果我在相应的文本编辑器中启用了文本换行功能,那么这些问题就不会发生.

当您打开文本换行时,您已经有效地使用了一条长行并将其缩短为许多较短的行,这反过来加快了前面提到的制表符计算速度.

PS:Zeus确实处理了你的286,721字符行,但是和大多数编辑一样,它对具有该行长度的文件反应不佳.