如何用C++编写文本编辑器

23

我曾经断断续续地学习过 C++,但从未用它编写过真正的应用程序。长时间以来,我一直认为编写一个文本编辑器会是一件非常有趣的事情,现在我正在寻找一个简单而体面的 C 或 C++ 编写的文本编辑器,能够给我灵感并教我如何自己编写一个文本编辑器。

你们能否向我推荐一个“简单而体面”的 C 或 C++ 编写的文本编辑器?


1
尽管我坚信我们以前做过这件事,但我没有找到完全匹配的内容——这是一个难以搜索的问题。以下是一些相关资源:https://dev59.com/GkfRa4cB1Zd3GeqP94c5 和 http://stackoverflow.com/questions/1047537/text-editor 和 https://dev59.com/XUXRa4cB1Zd3GeqPrm-t - dmckee --- ex-moderator kitten
9个回答

20

您可能想要查看Zilenvi。两者都相对简单;Zile类似于Emacs,而nvi则是Berkeley的vi。另一个可以考虑的是Nano,这是一个设计得易于新用户使用的简单文本编辑器。但是我不知道这些编辑器的代码质量如何。

我还建议阅读The Craft of Text Editing:Emacs for the Modern World。该书涵盖了许多编写文本编辑器时需要处理的具体问题,以及解决它们的方法、策略和算法。即使您的编辑器看起来与Emacs完全不同,其内容也应该是相关且有用的。


1
是否有类似于《文本编辑的艺术》这样的资源,专门处理文本数据,特别是在处理大文件(以GB为单位)的多个缓冲区时具有高效的内存使用?在深入源代码之前,拥有良好的理论基础似乎会很有帮助。 - msinfo

10

你想要看到的更像是一个教程而不是一个实际应用程序(我认为像Notepad ++这样的应用程序对初学者来说会很难上手)。由于你没有提到想要编程的环境,你可以查看QT文本编辑器演示。QT是一个跨平台的GUI工具包,因此你不会被绑定到特定的操作系统,但在Windows中设置可能比使用Visual Studio环境更难。

仅针对Windows,你可能需要考虑更深入地了解.NET平台(例如C#),如此问题中所建议的那样。这并没有帮助学习C ++,但它使GUI开发变得容易得多。


只是补充一下这个答案,我过去两年一直在开发一个文本编辑器项目,可以随意查看以获取灵感:https://github.com/Hexman768/Notepad-Sharp - Zach Pedigo

4

获取Vi。 现在真正的编辑器像vi/vim这样的还是很少; 我的意思是有很多像记事本/记事本++这样的编辑器, 但是很少有具有单独命令/控制模式的编辑器。 所以你可以查看vi源代码,汲取灵感,并引入一些革命性的东西。


4
为什么很少有编辑器具有单独的命令/控制模式,这其中有原因。不要误会,我也使用vim,但是这种单独的模式对它来说并没有太多的增益(相较于Emacs等编辑器),而且学习起来有些困难。 - David Thornley
2
有很多,但它们在你按住“Control”键时激活“控制模式”。 - ima
1
我同意你的观点,但是我已经厌倦了得到另一个记事本的克隆副本;) 我想要真正新颖的东西。 这就是我的信息。 - bua

4

Notepad++ 是一个优秀的开源编辑器,使用C++编写。


2

Notepad++ 在某些情况下可以被定义为“简单”。


1
简单?你确定吗?这可能是一个很好的文本编辑器,但它充满了大量无用的功能(搜索维基百科,好像有人会用那个)。 - dnclem

2

1

JuffEd。它是用C++编写的,由于使用了Qt和QScintilla,因此具有跨平台的特性。Notepad++也使用了Scintilla文本编辑器组件,但仅限于Windows平台。


1
你想制作什么样的文本编辑器?
首先的问题是,这会是基于GUI还是控制台?
如果是基于GUI,你想做类似记事本的东西吗?在哪个平台上?如果是基于MS Windows的,我可以推荐学习MFC。
如果是基于文本的,有许多开源解决方案可供选择。我建议你看一下最简单的编辑器,比如ed之类的。

0

转向QT,这是跨平台的,拥有丰富的富文本组件(小部件)。在QT中编写第一个应用程序将为您提供实际知识。我建议通过书籍学习QT。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接