如何在 C++ 中编写文本编辑器 [关闭]
Posted
技术标签:
【中文标题】如何在 C++ 中编写文本编辑器 [关闭]【英文标题】:how to write a text editor in c++ [closed] 【发布时间】:2009-10-05 13:17:09 【问题描述】:我断断续续地学习了 C++ 几次,但从未使用它编写过真正的应用程序。 很长时间以来,我一直在想写一个文本编辑器会是一件很有趣的事情,现在我正在寻找一个用 c 或 c++ 编写的简单但不错的文本编辑器,我可以从中获得灵感并学习如何自己编写文本编辑器.
你们能向我推荐一个用 c 或 c++ 编写的“简单但不错”的文本编辑器吗?
【问题讨论】:
尽管我确信我们之前已经这样做过,但我还没有找到完全匹配的内容——这很难搜索。以下是一些相关资源:***.com/questions/845527/… 和 ***.com/questions/1047537/text-editor 和 ***.com/questions/179299/… 【参考方案1】:您可能想查看Zile 或nvi。两者都相当简单; Zile 类似于 Emacs,而 nvi 是 Berkeley vi
。另一个值得一看的是Nano,这是一个简单的文本编辑器,旨在方便新用户使用。不过,我不知道其中任何一个的代码有多干净。
我还建议阅读The Craft of Text Editing: Emacs for the Modern World。本书调查了编写文本编辑器时必须处理的许多具体问题,以及解决这些问题的方法、策略和算法。即使您的编辑器看起来一点也不像 Emacs,它的内容也应该是相关且有用的。
【讨论】:
是否有任何类似的资源,如“文本编辑工艺”,专门处理处理文本数据,进行编辑,特别是具有高效内存使用的大文件(以 GB 为单位)的多个缓冲区?似乎在深入研究源代码之前,有一个良好的理论基础会很有帮助。【参考方案2】:好吧,你想看到的更像是一个教程,而不是一个实际的应用程序(我认为像 Notepad++ 这样的应用程序在开始时会深入研究)。由于您没有提及要在其中编程的任何环境,您可以查看QT Text Editor Demo。 QT 是一个跨平台的 GUI 工具包,因此您不必绑定到特定的操作系统,但可能比 Windows 中的 Visual Studio 环境更难设置。
仅对于 Windows,您可能需要考虑更多地挖掘 .NET 平台(例如 C#),如 this question 中所建议的那样。它对学习 C++ 没有帮助,但它使 GUI 开发变得非常容易。
【讨论】:
只是补充这个答案,过去两年我一直在做一个文本编辑器项目,请随意看看它以获得灵感:github.com/Hexman768/Notepad-Sharp【参考方案3】:获取 vi。 像 vi/vim 这样的真正编辑器非常缺乏;) 我的意思是有很多像记事本/记事本++这样的编辑器, 但很少有编辑器具有单独的命令/控制模式。 因此,您可以查看 vi 资源来激发自己并介绍一些革命性的东西。
【讨论】:
很少有编辑器具有单独的命令/控制模式是有原因的。不要误会我的意思,我生活在 vim 中,但单独的模式并没有增加太多(例如比较 Emacs),而且很难学习。 有很多,但是当您按住“控制”按钮时,它们会激活“控制模式”。 我同意你的观点,但我厌倦了获得另一个记事本克隆 ;) 。我想要一些非常新的东西。那是我的信息。【参考方案4】:Notepad++ 是一个用 C++ 编写的优秀的开源编辑器。
【讨论】:
【参考方案5】:Notepad++ 了解“简单”的一些定义。
【讨论】:
简单吗?你确定吗?它可能是一个非常好的文本编辑器,但它充满了大量无用的功能(搜索***,好像任何人都会使用它)。【参考方案6】:您也可以查看Scintilla编辑组件。
【讨论】:
【参考方案7】:JuffEd。由于使用了 Qt 和 QScintilla,它是用 C++ 编写的,跨平台。 Notepad++ 也使用了 Scintilla 文本编辑器组件,但仅限于 Windows 平台。
【讨论】:
【参考方案8】:你想制作什么样的文本编辑器?
第一个问题是这是基于 GUI 还是基于控制台?
基于图形用户界面,你想做记事本之类的东西吗?在什么平台上?如果它是基于 MS Windows 的,我可以推荐使用 MFC 吗?
如果它是基于文本的,您可以使用许多开源解决方案。我的建议是看最简单的编辑器,比如 ed 之类的。
【讨论】:
【参考方案9】:掠夺到 QT 这是跨平台的,有 RICHTEXT 组件(小部件)。在 QT 中编写第一个应用程序会给你实际的知识。我建议通过书来学习 QT
【讨论】:
以上是关于如何在 C++ 中编写文本编辑器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章