我想制作自己的源代码编辑器,有啥好的选择? [关闭]

Posted

技术标签:

【中文标题】我想制作自己的源代码编辑器,有啥好的选择? [关闭]【英文标题】:I want to make my own source code editor, what are the good choices to make? [closed]我想制作自己的源代码编辑器,有什么好的选择? [关闭] 【发布时间】:2010-10-31 19:47:03 【问题描述】:

我遇到过几十个从不提供简单内容的编辑器,例如:

区分类型关键字和指令关键字,以便我可以为它们设置不同的颜色。 使用标准 GUI 库(如 qt gtk 等)跨平台(notepad++,是的,我几乎恨你)。 足够的键盘快捷键,例如重复行、注释选择和不错的查找替换。 体面的任务缓和功能,例如单击数字行边距以选择整行。 Scintilla 或其他足够好的词法分析器可以突出显示足够多的不同事物,因为大脑编译代码是一回事,用眼睛快速识别什么是我认为重要的事情。

我只想支持非常基本的语言,例如 C、C++,也许是 Python,而不是 html 或 CSS。

Scintilla 是突出显示这些语言的好选择吗?词法分析器真的有必要吗?

QT 还不足以编写我想做的文本编辑器吗?我知道有 QScintilla,但是有没有理由我不应该使用集成了 lexer 的库?为什么 Scintilla 是这么好的库?

对于这样的编辑器,QT 是一个不错的选择吗? (我还想在编辑器中硬嵌入 ProFont 以消除操作系统之间不情愿的字体问题)。

编辑: 总之,我想做一个编辑器,只有notepad++的语法高亮功能。这是我的主要目标,使用 QScintilla 可能比我想象的要难一些......

编辑2: 好吧,我找到了 textadept,它并不为人所知,但非常棒。我没有设法制作我的词法分析器,因为我在 Windows 下还有其他事情要做,不幸的是它在 mac 上很慢。显然没有任何适用于 mac 的 Scite 官方版本。

【问题讨论】:

这很有趣,因为我在我用过的编辑器上看到了所有这些功能,那么问题是什么?没有一个可以在每个平台上运行的软件?我很困惑您对当前无法使用(例如)Eclipse 代码库的问题并对其进行修改以执行您想要的操作... 日食?那是 IDE 而不是编辑器... Eclipse 不是一个 IDE,它是一个软件平台和一个代码库,主要用于 IDE。 好吧,我可能会看看它是如何进行语法高亮的...... 我已经成功地在 Linux 中通过 Wine 运行 Notepad++,但我没有经常使用它,因为我主要使用 The One True Editor (Vim) 进行编辑。 【参考方案1】:

C++ 无论如何都不是一种“非常基本的语言”。

为什么你真的想这样做?那里有很多开源代码编辑器。

【讨论】:

本质上是因为我想要一个好看的编辑器:我就是放不下一个带有我想要的颜色的深色背景的编辑器……我想做这个的主要原因,我是否厌倦了总是将我喜欢的编辑器配置为我喜欢的东西,另外,我正在寻找的功能非常简单,在现有的编辑器中工作总是很痛苦,而且看到所有高级功能总是令人沮丧编辑器上的功能,没有找到我喜欢的简单的东西。我知道我是个书呆子,我有我愚蠢的标准,但如果我能做出一个很好的编辑器,尤其是跨平台... 我个人认为没有比 C++ 更基础的语言 @gokoon: 找到一个支持你需要的功能的编辑器,一劳永逸地配置它,然后保存配置文件不是更容易吗?这样一来,您就可以免于工作 1 小时,而不是几个人年。 我说的是基本的,我想说我只是想支持它,就像“流行语言”一样,不支持所有类型的语言,比如 lisp python java ocaml php ruby​​ 等,只支持 C++。对于配置文件,这还不够,notepad++ 本身并不在 Mac 上运行,我更喜欢硬编码一些行为,因为有时它们更有意义。这应该会大大减轻任务。 @gokoon:我简直不敢相信您对代码编辑器的需求与其他人不同。【参考方案2】:

如果您必须编写自己的编辑器,我建议您查看其他开源编辑器并检查您将哪些部分移植到您的编辑器。

移植现有工作和测试代码的片段通常比编写自己的代码并对其进行调试要好得多。

在仔细阅读了几个严肃的开源编辑器:Emacs、Eclips、CodeBlocks、CodeLight 等之后,我相信你会开始改变从头开始编写编辑器的想法。

-- 托马斯·马修斯My Info

【讨论】:

你引用的编辑器是功能齐全的IDE,我只想制作一些带有语法突出显示的简单记事本,这是scintilla所做的事情......而Qt可能会有很大帮助......跨度> 【参考方案3】:

如果您真的想这样做(听起来需要做很多工作),我会查看 ANTLR 来解析代码。您可能会从他们的 ANTLRWorks 展示中获得一些想法。 将解析树链接到显示器可能需要相当多的工作,所以我会看看像 Eclipse 这样的 IDE 平台必须提供什么

【讨论】:

【参考方案4】:

你对 Java 还满意吗?

如果是这样,请选择 Eclipse 技术:SWT 和 JFace。后者为您提供了org.eclipse.jface.text 包,具有​​很多功能。然后您可以在此基础上轻松滚动自己的编辑器。 (我更喜欢基于 Eclipse 的编辑器而不是基于 Scintilla 的编辑器,我相信它们往往更高级且功能更丰富,但这是我个人的看法。)

但是,您可能想更进一步,为您的应用程序使用Eclipse RCP framework...但是为什么不使用 Eclipse IDE 本身,只需添加您想要的任何插件作为插件。

Eclipse 代码库非常庞大,取决于您想要重用多少。

【讨论】:

java 在政治上不太适合我。如果我专注于 windows 可能没问题,但事实并非如此。【参考方案5】:

我会花一些精力尝试使用 emacs 颜色主题包和各种语言模式;看看你是否可以弯曲 lisp 来做你想做的事。你几乎肯定可以。在我看来,emacs 和您的一些努力将使您成为您的终极编辑器(请记住,emacs 实际上只是一个 DIY 编辑器工具包)。如果您无法将 emacs 弯曲成您想要的形状,那么您将可以很好地花费精力编写自己的形状。

【讨论】:

【参考方案6】:

我试图为我目前正在处理的项目做类似的事情,我查看了QScintilla 并不得不将其从我的项目中删除,因为当你嵌入到QGraphicsView 中时,我可以' t 控制小部件图像的分辨率,它似乎将文本绘制为图像,这就是我们所看到的,我尝试增加 QFont 的平滑度并改善了它,但仍然不行。

所以我在 QT 的代码库中找到了一个简单的代码编辑器 进入:

C:\Qt\4.7.3\src\scripttools\debugging\qscriptedit.h
C:\Qt\4.7.3\src\scripttools\debugging\qscriptedit.cpp

如果您转到我试图嵌入代码编辑器的OpenShapeFactory 的源代码:检查我是如何获得语法荧光笔和自动完成功能的:

此小部件使用 qt 附带的 qscriptedit 小部件,您可以将自己的关键字添加到文件中的语法高亮显示以及自动完成下拉列表中。

这是标题,scriptwidget.h 和实现 scriptwidget.cpp 可作为整个 project code 的一部分。

下一个阶段是查看 QTCreator 并查看他们已经拥有的所有代码(如果不是大部分这些功能),在你编译他们的版本之后,只需找到添加你的小模块的地方,你可能会更接近简单的代码编辑器。

祝您在这个方向上好运,如果您找到解决方案,请将其发送过来,:) 提醒注意上面的存储库链接,如果我找到一种方法,我可能会追着你找到答案。

【讨论】:

【参考方案7】:

就像其他人所说的那样,它可能比它的价值更麻烦,但如果你真的想这样做,Qt 是一个不错的选择,因为它是跨平台的。使用 QSyntaxHighlighter 突出显示您的关键字/类型,并充分利用 Qt 对键盘快捷键的支持。

【讨论】:

QScintilla 不是更强大吗? 可能;我从来没有使用过它。看起来不错。【参考方案8】:

为脚本引擎使用 C、QT 和 Lua 之类的东西。

【讨论】:

这是 textadept 所做的,没有 QT,而且它很慢。我放弃了,主要是因为跨平台的文字着色和编辑同时是高级和低级,太复杂了。我可能会查看 wx 小部件并查看我可以使用什么,但主要问题显然是词法分析器和颜色处理。我想知道我是否可以用 HTML5 和上一代浏览器做点好事。

以上是关于我想制作自己的源代码编辑器,有啥好的选择? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Mac 有啥好的十六进制编辑器/查看器? [关闭]

有啥好的工具可以重构 Perl Web 代码吗? [关闭]

打字稿中有啥好的静态代码分析工具吗? [关闭]

有啥好的 C++ 项目构建工具可以替代 make 吗? [关闭]

使用图像映射生成器有啥好的替代方法? [关闭]

.NET 有啥好的分布式代理/服务模型吗? [关闭]