开发工具IDE【免费下载链接】liteideLiteIDE is a simple, open source, cross-platform Go IDE.项目地址https://gitcode.com/gh_mirrors/li/liteide点击查看免费下载FakeVim 是 LiteIDE 仓库内嵌的第三方库用于在 QTextEdit、QPlainTextEdit 等 Qt 控件中模拟 Vim 的编辑行为。本文以 FakeVim Python 绑定说明 为骨架结合仓库内 configure.py、fakevim.sip、fakevimproxy 桥接层 与 test.py 示例程序系统讲解如何用 PyQt 的 SIP 工具链把 C 的 FakeVim 库编译成 Python 可导入的扩展模块。读完本文你将掌握完整的构建流程、关键环境变量、SIP 接口定义的组织方式、Qt 信号到 Python 虚函数的桥接原理以及如何运行仓库自带的 Python 演示编辑器并编写自己的 FakeVimProxy 子类。一、背景什么是 FakeVim 的 Python 绑定在 LiteIDE 的 3rdparty 目录中FakeVim 以完整库形式提供见 FakeVim 主 README核心实现位于 fakevimhandler.h它模拟了 Vim 的 normal / insert / visual / command-line 四种模式以及大量 Ex 命令。而 python 子目录 做的事情是让这些 C 能力对 Python 脚本开放通过 SIPPyQt 官方使用的绑定生成器把FakeVim::Internal::FakeVimHandler与配套的FakeVimProxy接口暴露给 Python使开发者可以用 Python 快速搭建一个带完整 Vim 键位语义的编辑器原型或对 FakeVim 的行为做脚本级验证。该目录下的绑定文件共有五个README.md —— 构建与安装说明本文的主体文档configure.py —— SIP 构建配置脚本fakevim.sip —— 描述 C 类如何映射到 Python 的 SIP 接口文件fakevimproxy.h 与 fakevimproxy.cpp —— 负责把 FakeVimHandler 发出的 Qt 信号转译为 C 虚函数调用test.py —— 用绑定实现的一个可运行迷你 Vim 编辑器。二、构建前置条件与四个关键注意事项原文档开篇列出四条注意事项它们是构建成败的关键绑定构建过程由 PyQt 的 SIP 驱动。SIP 不是独立于 PyQt 的工具它依赖 PyQt 安装时携带的sipconfig模块与sip_flags配置因此必须先安装与目标 Qt 版本匹配的 PyQt 开发包。Debug 构建默认开启。原文档明确 Debug build is enabled by default这意味着 FakeVim 库本身的编译配置见 fakevim.pro会保留调试信息在发布场景中如需关闭需在构建 FakeVim 库时自行调整其 qmake 配置。FakeVim 库与绑定必须用同一版本的 Qt 编译。绑定在运行时通过 SIP 生成的代码直接调用 Qt 类如QTextCursor、QTextEdit版本不一致会导致 ABI 层面的崩溃或链接错误。构建与运行必须使用同一 Python 主版本。例如用 Python 3 构建出的扩展模块必须由 Python 3 解释器加载混用 2/3 会在导入阶段因解释器 ABI 不匹配而失败。对应到代码上configure.py 会通过qmake -query QT_VERSION判断当前 Qt 是 4 还是 5并在 L24-L33 分别从PyQt5.QtCore.PYQT_CONFIGURATION或PyQt4的配置中取出sip_flags如果两者都不是直接抛出Qt version 4 or 5 is required!L34-L35。这从源码层面印证了必须安装与 Qt 匹配的 PyQt这一前提。三、构建与安装步骤详解原文档给出的标准构建流程是运行build.sh或者手动创建build子目录后依次执行configure.py、qmake、make。需要说明的是当前仓库的 python 目录 中并未包含build.sh文件因此手动流程是更可复现的路径# 1. 进入绑定目录 cd liteidex/src/3rdparty/fakevim/python # 2. 创建构建目录并进入 mkdir build cd build # 3. 生成 SIP 代码与 qmake 工程文件fakevim_python.pro python ../configure.py # 4. 生成 Makefile qmake # 5. 编译 make # 6. 安装默认安装到当前用户的 site-packages make install其中第 3 步是关键configure.py会调用系统 SIP 工具读取 PyQt 的sip_flags与 include 路径把 fakevim.sip 翻译成 C 源码并追加生成一份名为fakevim_python.pro的 qmake 工程详见 configure.py 与 L72-L104 中写入模板的逻辑。安装环节使用make install目标路径由 configure.py 生成工程时计算默认写入PREFIX site.getusersitepackages()configure.py即当前用户的 site-packages 目录构建时也可通过 qmake 的PREFIX参数覆盖安装前缀。Ubuntu 14.04 下的特殊要求原文档专门强调在 Ubuntu 14.04 上必须安装pyqt5-dev包并且构建脚本需要用以下方式调用以指定 Python 3PYTHONpython3 ./build.sh由于仓库当前未附带build.sh等价的手动操作是安装pyqt5-dev后用python3执行 configure.py即python3 ../configure.py并在后续步骤中使用与python3对应的 qmake/PyQt5 环境。这正对应注意事项第 4 条构建与运行使用同一 Python 主版本。四、configure.py 深度解析可调环境变量与生成逻辑configure.py 用一组环境变量控制整个构建全部带默认值L53-L63环境变量默认值作用QMAKEqmake指定 qmake 可执行文件路径用于探测 Qt 版本SIPsip指定 SIP 工具路径PROJECT_PATH../..FakeVim 库根目录相对绑定目录LIBRARY_PATH$(PROJECT_PATH)/fakevim已编译好的 FakeVim 静态/动态库所在目录SIP_FILE_PATH$(PROJECT_PATH)/python/fakevim.sipSIP 接口文件位置PYQT_INCLUDE_PATH/usr/share/sip/PyQt5Qt5或/usr/share/sip/PyQt4Qt4PyQt 自带的 SIP include 目录用于%Import系统模块脚本的运行逻辑分四步探测 Qt 主版本L19-L35调用qmake -query QT_VERSION据此选择 PyQt5 或 PyQt4 的PYQT_CONFIGURATION取得sip_flags调用 SIP 生成代码L65-L70把sip_flags按空格拆分后连同-I pyqtInclude、-b fakevim_python.pro、-o -c .传给 SIP产出绑定源码与初始工程文件追加工程配置L72-L104向fakevim_python.pro写入插件式共享库模板关键项包括TEMPLATE lib、CONFIG release plugin no_plugin_name_prefix以插件形式产出不带前缀名的共享库QT widgets显式依赖 Qt Widgets 模块FakeVimHandler 基于 QTextEditHEADERS/SOURCES追加 fakevimproxy.h 与 fakevimproxy.cppINCLUDEPATH加入 Python 头文件目录、SIP 头文件目录、FakeVim 项目目录LIBS链接-lfakevim并写入-Wl,-rpath指向LIBRARY_PATH同时链接 Python 动态库取自sysconfig的LIBDIR/MULTIARCH/LDLIBRARYDEFINES FAKEVIM_PYQT_MAJOR_VERSION5或 4把 Qt 版本以宏形式传给绑定源码。设定安装路径L87-L92PREFIX默认为site.getusersitepackages()target.path $$PREFIX并加入INSTALLS。从这些细节可以看出绑定产物依赖运行时能找到libfakevim通过 rpath 指向LIBRARY_PATH因此必须先完成 FakeVim 库本身的构建qmake make见 FakeVim 主 README再构建绑定。五、SIP 接口定义Python 侧能看到什么fakevim.sip 是绑定的合同它声明了模块名FakeVim并按 Qt 版本条件导入QtCore、QtGui、QtWidgets三个 SIP 模块L1-L8。其中值得关注的类型有Range 与 RangeModeenum RangeMode { RangeCharMode, // v RangeLineMode, // V RangeBlockMode, // Ctrl-v RangeLineModeExclusive, RangeBlockAndTailMode // Ctrl-v 用于 D 和 X }; struct Range { Range(); Range(int b, int e, RangeMode m RangeCharMode); QString toString() const; bool isValid() const; int beginPos; int endPos; RangeMode rangemode; };L18-L45 中的注释特别提醒前三个枚举值的顺序不能重排否则会破坏 Vim 剪贴板格式的兼容性——这与 C 侧 fakevimhandler.h 的定义完全一致。ExCommandstruct ExCommand { ExCommand(); ExCommand(const QString cmd, const QString args QString(), const Range range Range()); bool matches(const QString min, const QString full) const; QString cmd; bool hasBang; QString args; Range range; int count; };matches(min, full)是处理命令缩写的关键方法例如:e之于:edithasBang对应:q!中的!。MessageLevel按严重程度排序的六档消息级别L69-L77MessageMode显示当前模式、MessageCommand显示上一条 Ex 命令或搜索、MessageInfo命令结果、MessageWarning、MessageError、MessageShowCmd部分输入的命令。FakeVimHandler 与 FakeVimProxyFakeVimHandlerL79-L131是核心类构造时接收一个QWidget *作为被模拟的编辑器并暴露了handleCommand(cmd)执行一条 Ex 风格命令如source ~/.vimrc、w、q!handleInput(keys)/handleReplay(keys)注入按键序列installEventFilter()/setupWidget()/restoreWidget(tabSize)把事件过滤器挂到编辑器并初始化setTextCursorPosition/textCursor/setTextCursor读写光标physicalIndentation/logicalIndentation/tabExpand标注为 Test only 的缩进测试辅助方法jumpToLocalMark(mark, backTickMode)跳转局部标记。FakeVimProxyL133-L166是 Python 侧需要继承实现的回调接口包含commandBufferChanged、statusDataChanged、extraInformationChanged、selectionChanged、highlightMatches、writeAllRequested、moveToMatchingParenthesis、indentRegion、completionRequested、findRequested、handleExCommand、块选择与折叠相关方法等。Python 开发者通过覆写这些虚函数就能把 FakeVim 的行为接入任意编辑器 UI。六、信号到虚函数的桥接fakevimproxy 的工作原理C 侧的FakeVimHandler通过 Qt 信号通知外部编辑器见 fakevimhandler.h 中commandBufferChanged、writeAllRequested、handleExCommandRequested等 signals而 Python 侧希望以覆写虚函数的方式接收这些回调。桥接工作由 fakevimproxy.h 与 fakevimproxy.cpp 完成FakeVimProxy以FakeVimHandler *为构造参数fakevimproxy.h构造时遍历自己的元对象找出所有以on_开头的槽fakevimproxy.cpp把on_前缀去掉后当作信号名在 handler 的元对象中查找对应信号并connect每个on_*槽把信号参数转调给同名虚函数例如on_commandBufferChanged调用commandBufferChanged(...)L34-L38on_handleExCommandRequested通过指针参数回传handleExCommand的返回值L112-L115。由于FakeVimProxy是 QObject 子类且虚函数被 SIP 暴露为可覆写Python 中继承FakeVimProxy并覆写这些方法时信号触发就会自动落到 Python 实现上——这就是 test.py 中子类覆写即生效的底层机制。七、实战用 test.py 搭建 Python 版 Vim 编辑器test.py 是绑定的完整使用范例共四个组件1. Proxy 子类L21-L158把 FakeVim 的回调接到具体 UI 上关键覆写包括openFile / commandWrite / commandQuit / maybeCloseEditor实现:e、:w、:q、:wq的文件读写与退出逻辑L38-L98handleExCommand(cmd)L101-L114利用cmd.matches(e, edit)等缩写匹配分发命令并支持hasBang强制退出enableBlockSelection / disableBlockSelection / blockSelection / hasBlockSelectionL117-L132透传 Qt 的块选择状态commandBufferChanged / statusDataChanged / extraInformationChanged / highlightMatchesL135-L153更新状态栏与搜索高亮。2. Editor 类L161-L326继承QTextEdit实现了块选择绘制、highlightMatches正则高亮用QRegExp在文档中循环查找并收集QAbstractTextDocumentLayout.SelectionL186-L217以及通过eventFilter拦截 Paint 事件绘制光标与块选区L219-L288。3. StatusBar 类L329-L357由消息标签、命令输入框、数据标签组成当 FakeVim 进入命令行模式cursorPosition ! -1时显示输入框并把事件过滤器安装上去否则显示普通状态消息。4. MainWindow 类L359-L389组装上述组件关键初始化序列是self.__handler FakeVimHandler(self.__editor) self.__proxy Proxy(self, self.__editor, self.__handler) self.__handler.installEventFilter() self.__handler.setupWidget() self.__handler.handleCommand(source {home}/.vimrc.format(homeos.path.expanduser(~)))注意最后一行程序启动时会自动 source 用户主目录下的.vimrc说明绑定完整继承了 FakeVim C 侧:source的能力见 FakeVim 主 README。运行方式在构建并make install之后python3 test.py # 启动空编辑器 python3 test.py /path/to/file # 直接打开文件启动后即可体验 Vim 的h/j/k/l、ciw、/search、:wq等操作按:进入命令行jj之类的映射可写入~/.vimrc生效。绑定还会根据FAKEVIM_PYQT_VERSION由DEFINES宏注入test.py自动选择导入 PyQt5 还是 PyQt4 的模块。八、绑定背后FakeVim 支持哪些 Vim 能力Python 绑定暴露的FakeVimHandler行为与 C 实现一致具体能力清单以 FakeVim 主 README 为准主要有模式normal、insert/replace、visual、命令行:四种模式移动与编辑h/j/k/l、gg/G/0/^/$、词移动w/e/b、f/t查找移动、{/}段落移动、ciw/3daw/ya{等 inner/a 操作、带寄存器的删除/修改/复制/粘贴、undo/redo、C-A/C-X数值增减如128C-A把0x0ff变成0x17f、.重复、~/gU/gu大小写、//缩进、宏录制q/、标记、gv重选上次可视选区、zt/zb/zz滚动、gj/gk折行移动等命令行命令:map/:unmap/:inoremap、:source逐行读取 vimrc、:substitute、:,!cmd与:.!cmd外部命令过滤、:read、:yank/:delete/:change、:move/:join、:20跳转地址、:history、:registers/:display、:nohlsearch、:undo/:redo、:normal、:/:等选项:set ...autoindent、expandtab、tabstop、shiftwidth、hlsearch、ignorecase、smartcase、incsearch、wrapscan、showcmd、scrolloff、clipboard、tildeop、iskeyword、backspace等。主 README 还给出了可直接写入.vimrc的参考配置如set expandtabset tabstop4set shiftwidth4、nnoremap ; :、inoremap jj Esc、vnoremap gv等这些配置同样适用于 test.py 启动的 Python 编辑器。需要留意的是搜索语法基于 Qt 的QRegExpVim 中的\、\在此等价于\b。九、验证与回归测试仓库为 FakeVim 提供了两套 C 测试test/目录中的简单示例编辑器test/main.cpp和tests/目录下的脚本化测试tests/vim-test.sh后者用于批量校验键位序列的执行结果。Python 绑定虽然目前未附带独立的自动化测试脚本但 test.py 本身就是可交互验证的载体启动后逐条输入移动、编辑与 Ex 命令观察状态栏与光标行为即可确认绑定链路SIP 生成代码 → FakeVimHandler → FakeVimProxy 桥接 → Python 覆写是否工作正常。若发现 Python 侧表现与 C 侧不一致可优先检查 Qt 版本是否一致、Python 主版本是否匹配这两条前置约束。十、小结FakeVim 的 Python 绑定是一条Qt 库 → SIP 接口 → 信号桥接 → Python 应用的完整技术链路configure.py 负责探测 Qt/PyQt 环境并生成 SIP 代码与 qmake 工程fakevim.sip 定义 Python 可见的类、枚举与结构忠实映射 C 侧 fakevimhandler.hfakevimproxy 桥接层 把 Qt 信号转译为可覆写虚函数是 Python 回调生效的关键test.py 给出可直接运行的参考实现覆盖文件读写、状态栏、搜索高亮、块选择等典型场景。对于希望在 Python 环境中复用 Vim 键位语义如构建自定义编辑器、脚本化验证键位映射的开发者可直接按构建 FakeVim 库 → 运行 configure.py → qmake/make → make install → 继承 FakeVimProxy 编写应用的流程落地并始终牢记 Qt 版本一致、Python 主版本一致这两条构建纪律。赞分享开发工具IDE【免费下载链接】liteideLiteIDE is a simple, open source, cross-platform Go IDE.项目地址https://gitcode.com/gh_mirrors/li/liteide点击查看免费下载相关推荐Spack 中的 SIP 构建系统为 C/C 库生成 Python 绑定Spack 中的 SIP 构建系统为 C/C 库生成 Python 绑定 本指南深入讲解 Spack 包管理器对 SIP 构建系统的内置支持 SIPPa开发工具构建工具CLI在 OpenBSD 上从源码构建 radare2 与 Python 绑定完整实战指南在 OpenBSD 上从源码构建 radare2 与 Python 绑定完整实战指南 本指南以仓库 doc/openbsd.md https://link.g逆向工程网络安全LiteIDE 中的 FakeVim用 Qt 组件为 Go 编辑器注入完整 Vim 键位模拟LiteIDE 中的 FakeVim用 Qt 组件为 Go 编辑器注入完整 Vim 键位模拟 FakeVim 是一个用于在 QTextEdit、QPlainT开发工具IDE上一篇SeleniumBase 与 Behave BDD在 SeleniumBase 中编写与运行 Gherkin 行为驱动测试的完整指南下一篇【亲测免费】 libONVIF 安装和配置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
我们做了一个“不说服用户“的垂直模型训练工具:KVAXIR 前言
好久不见。这几个月我一直在做同一件事,现在它终于能见人了。
KVAXIR 是一个跑在你自己电脑上的建模工具:接上设备就能边采边标边训练,普通 CSV/Excel 数据集也能用。而它最特别的地方是——当它觉得你的数据可能有问题时,它… · 2026/9/27 7:19:36
中国建筑网官网企业愿景怎么选?3步避开流量陷阱 中国建筑网官网企业愿景怎么选?3步避开流量陷阱 网站做好了没人访问,这是绝大多数站长和企业主最头疼的问题。很多老板花几万块做了个高大上的官网,上线后每天访客个位数,连自己的员工都找不到入口。这不仅仅是技术故障,更是底层逻辑的偏差。在探讨中国… · 2026/9/27 7:19:33
用 LinuxKit 为 Intel Clear Containers 构建精简虚拟机 Guest 内核与镜像 操作系统云原生容器运行时 【免费下载链接】linuxkit A toolkit for building secure, portable and lean operating systems for containers 项目地址: https://gitcode.com/gh_mirrors/li/linuxkit 点击查看 免费下载 导读
本文围绕 projects/clear-containers/… · 2026/9/27 7:19:27
如何在 VS Code 中配置 Claude Code 扩展并接入 TaoToken 统一 API 通道 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 7:58:10
wordpressserver酱搭建通知系统的完整流程 wordpressserver酱搭建通知系统的完整流程 网站做好了没人访问,是新手站长最崩溃的时刻。你熬夜改完代码,上线后每天看着百度统计里个位数的UV,心里直打鼓。这时候,如果有个工具能在你后台发新文章时,立刻推送到手机微信,帮你第一时间… · 2026/9/27 7:58:10
广东网站优化公司怎么选?源码下载后避开备案坑的3步实操指南 广东网站优化公司怎么选?源码下载后避开备案坑的3步实操指南 很多刚入行做站的朋友,一提到“备案”就头大,流程像迷宫,材料像天书,心里没底。别慌,我干了十年建站,见过太多人因为搞不清备案,导致网站上线后因为合规问题被挂起,甚至影响SEO排名。… · 2026/9/27 7:58:04
isomorphic-git writeCommit 详解:如何直接写入 Git Commit 对象 开发工具 【免费下载链接】isomorphic-git A pure JavaScript implementation of git for node and browsers! 项目地址: https://gitcode.com/gh_mirrors/is/isomorphic-git 点击查看 免费下载 writeCommit 是 isomorphic-git 提供的一个底层 API,用于… · 2026/9/27 7:57:57
Metapi智能路由引擎深度解析:4级成本信号+概率加权,自动选最便宜的通道 Metapi智能路由引擎深度解析:4级成本信号概率加权,自动选最便宜的通道 【免费下载链接】metapi 把你在各处注册的 New API / One API / OneHub / DoneHub / Veloera / AnyRouter / Sub2API 等站点, 汇聚成 一个 API Key、一个入口,… · 2026/9/27 7:57:57
网站改版被百度k?3步自测+保姆级建站教程避坑 网站改版被百度k?3步自测+保姆级建站教程避坑 改个需求建站公司拖一周,上线没两天流量直接腰斩,甚至首页都打不开了。这种“改版即死刑”的噩梦,是不是让你怀疑人生?别急着骂人,更别急着找新公司,90%的“被K”其实不是百度故意针对你,而是你在… · 2026/9/27 7:57:57
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01