一个控制台文本编辑器. 使用 C++ 编写, 追求代码可读性、可拓展性, 并尽量使用现代 C++ 特性.
为 BIT 第三届十行代码大赛参赛作品. 95% 以上的代码均为原创, 只有极少数代码来源网络 / 文档 / AI. (此为当时的情况)
比赛结束后仍在继续更新. 目前正在进行大重构, 因此暂时废弃了许多功能. 文档暂未经过完善的更新, 可能有所出入.
- 所见即所得的插入、删除、选择功能, 均支持鼠标、键盘操作, 且和各大 IDE 的操作逻辑基本保持一致
- 鼠标: 直接点击即可移动光标, 拖动即可选择
- 键盘:
- 使用方向键移动光标, 到达屏幕边缘时会自动滚动屏幕以适配光标
Shift+ 方向键进行选择, 具体逻辑和各大 IDE 基本保持一致- 支持
Backspace(退格) 键删除选中内容或光标前一格的字符, 也支持Delete键删除光标后一格 (或选中内容) 的字符 - 也支持使用
Home/End键来直接移动到文件头 / 尾
- 支持许多以词为单位的操作(使用
ICU库实现)- 鼠标: 双击可选中当前词
- 键盘:
Ctrl+左/右方向键即可以词为单位移动光标, 也可搭配Shift进行选择Ctrl+Backspace可以删除光标前的词
- 以词为单位的操作支持多种语言, 对中文也能正常适配 (不过有的词语无法根据语境准确适配)
- 支持四向滚动屏幕, 且能自动滚动
- 使用鼠标滚轮即可上下滚动页面, 按住
Ctrl来更精确地调整 - 也支持使用鼠标滚轮来左右滚动页面, 按
Ctrl来精确滚动 (但 Win11 新版终端中不支持) - 使用
Ctrl+{[/]}即可向左 / 右滚动屏幕, 按住 Alt 来更精确地调整 (这里说的{[和]}指的是键盘上的按键) - 使用键盘移动光标时, 屏幕会自动滚动来使光标始终位于屏幕内, 进行插入 / 删除时也一样
- 使用鼠标时也会自动移动, 但没有那么智能 (比如鼠标滑到最右侧时不会自动往右滚屏, 往上 / 往下时同理)
- 使用
Ctrl+上/下方向键也可以滚动屏幕, 一次一行 - 也支持使用
PageUp/PageDown键来滚动页面, 一次一屏 (少一行, 也就是上一屏的最后一行 / 第一行会保留)
- 使用鼠标滚轮即可上下滚动页面, 按住
- 支持复制 / 粘贴 (使用 Win11 的新终端时粘贴会被终端接管, 但仍能正常发挥作用, 只是速度慢一点)
- 使用
Ctrl+C/V即可 - 在 Win11 终端中可以使用
Ctrl+ (任意一个其它按键) +V来绕过终端自带的粘贴功能, 当然不绕过也行
- 使用
- 针对不同大小的窗口能自动适配, 即使在使用过程中拉动窗口大小也能即时适配
- 使用老式终端时可能需要拉动左右边框才会自动适配, 单拉上下边框没用
- 大部分控制台窗口没有动态适配 (即当窗口打开后, 拉动终端窗口大小, 控制台窗口不会自动改变大小, 但会在控制台无法容纳自身时自动关闭)
- 但是有静态适配, 根据不同的终端大小自动调整控制台窗口大小, 并在空间不足以打开时弹出提示
- 支持中文输入, 也支持中英文混杂排版, 加上制表符 (
Tab) 也完全没问题 - 双击
Esc即可退出 (按一次Esc时会有提示) , 非常符合直觉, 哪怕是电脑小白应该也能成功退出- 在有弹出窗口时按第一次
Esc只会关闭当前窗口, 但只要一直按Esc就能退出, 而且已经按过一次Esc时也能强制退出, 所以电脑小白应该也没问题......吧
- 在有弹出窗口时按第一次
Ctrl+S可以保存- 支持打开已经存在的文件, 使用
Ctrl+O即可 - 支持新建文件, 使用
Ctrl+N即可. 具体逻辑基本同主流编辑器一致, 在新建时无需给文件起名、选择路径等, 直到保存时才需要指定保存路径 - 支持另存为, 使用
Ctrl+Shift+S即可. 当原文件无法继续写入时也会自动触发- 支持覆盖保存, 此时会弹出控制台窗口询问是否覆盖
- 打开 / 另存为都有对应的控制台内窗口, 并有对应提示 (失败了也有对应的提示) , 新窗口也能部分地动态适配控制台大小
- 文件路径的输入有防呆设计, 可以正常识别多种输入方式, 同时支持按 Tab 自动补全
- 按 Tab 可以补全未写完的路径, 在当前路径有效时会逐次循环遍历当前目录下的其它文件 / 目录, 在目录名后加
\后再按 Tab 则会遍历子目录 - 也支持带点的路径, 比如
.\testText.txt或..\..\testText.txt, 不加前缀默认当前目录, 补全时会补上前缀 - 总的来说逻辑和一般终端的类似, 试一试就基本能知道
- 按 Tab 可以补全未写完的路径, 在当前路径有效时会逐次循环遍历当前目录下的其它文件 / 目录, 在目录名后加
- 文件路径的输入有防呆设计, 可以正常识别多种输入方式, 同时支持按 Tab 自动补全
- 支持撤销 / 重做, 按
Ctrl+Z/Y即可 (任意文本输入框内都支持) , 最高支持步数、操作融合上限及策略均可配置 - 当前文件未保存时就试图打开 / 新建新文件 / 退出时, 会用一个控制台窗口提示是否先保存
- 弹出窗口也支持用鼠标进行选择!
- 支持查找 / 替换, 使用
Ctrl+F/H即可, 查找 / 替换时, 使用方向键在结果中切换. 替换时, 按回车替换当前项目,Shift+回车替换全部- 替换支持撤回, 虽然只能挨个撤回
- 查找 / 替换均支持自主选择是否区分大小写以及全字匹配, 只需在窗口中按 Tab 切换到对应选项卡, 然后使用方向键 (左 / 右) 切换即可 (也支持鼠标)
- 查找 / 替换均支持正则表达式
- 比如可以尝试打开本项目中的 Editor.ixx, 然后查找
(wstring)(_view)?, 替换为$2(记得打开正则匹配), 即可将wstring删除, 并将wstring_view替换为_view
- 比如可以尝试打开本项目中的 Editor.ixx, 然后查找
- 支持不同编码类型, 并会在编码类型错误时给出提示
- 目前支持 UTF-8 和 GB 2312
- 也可以强行用错误的编码方式打开, 但会有很多 bug (最明显的就是字符宽度错误以及连带的光标、制表符错误) , 而且这些 bug 不在修复范围内
- 也支持自动识别编码方式
- 支持自动保存, 会自动保存至另一个临时文件 (后缀名、默认名字均可配置), 且会在恰当的时机删除该临时文件
- 默认 3 分钟保存一次 (可配置)
- 能同时兼容新终端与老终端
- Win11 下
Win+R输入conhost即可调出老终端, 用管理员模式运行时貌似也会默认使用老终端 - 加上没有使用一些新特性, 理论上在老版本 Windows 下也可以正常使用, 但未经测试
- Win11 下
- 支持通过命令行调用, 此时使用命令行参数可直接以指定编码打开文件
- "-o" / "--open" 表示打开, 后接要打开的文件路径
- "-e" / "--encoding" 表示编码, 后接编码名称
- 有防呆设计, 比如 "utf-8", "UTF-8", "UTF 8", "utf8" 都能定位到 UTF-8
- "-h" / "--help" / "/?" 可以输出帮助, 会覆盖其它一切参数
- 只需要指定打开文件路径时, 可以直接作为参数附加, 无需带 "-o" / "--open"
- 示例 (程序名字取 ConsoleNotepad) :
- ConsoleNotepad 1.txt
- ConsoleNotepad -o 1.txt -e UTF-8
- ConsoleNotepad --encoding "gb 2312" -o 1.txt
- ConsoleNotepad /?
- 有简单友好地图形化设置界面, 按
Ctrl+P即可打开.- 该界面完全支持鼠标操作. 可以直接点击来切换设置项, 也可以用滚轮上下滚动, 甚至可以直接通过点击左右两侧的箭头来切换选项 (其它地方其实也可以, 比如查找 / 替换里的就可以)
- 设置内容会保存到当前目录下
- 有历史记录窗口,按
Ctrl+L即可打开,其中记录了所有还能撤销 / 重做的操作,可以直观、简单地撤销 / 重做- 该窗口也支持鼠标操作
- 有行号显示, 支持自定义行号宽度 (设置为 0 即可关闭)
- 行号是彩色的
- 性能较为优越 (尽管优化空间还很大)
- 实测, 在我的电脑上, 打开一个 1GB, 1280 万行的文件大约只需要 1 秒 (Release 构建), VS Code 大概需要 8 秒, VS 需要 15 秒
- 并且此时各项操作仍能较为顺利地进行 (滚动 / 插入 / 删除 / 历史记录等都可以)
IDE: Visual Studio 2022 17.13.5 x64
平台工具集: Visual Studio 2022 (v143)
C++ 语言标准: 最新 ( /std:c++latest ), 并且勾选 “生成 ISO C++23 标准库模块”
操作系统: Windows 11 22H2 22621.3737
(理论上从 GitHub clone 下来后直接拿对应版本的 VS 编译就能跑, 不用改设置)
基本按时间排序, 越靠上的越古老
(加了勾选框却完全不勾.jpg)
- 调整窗口大小的过程中编辑器会鬼畜 (特别是快速拉动时) , 不过这个不涉及核心所以不急着修 (谁没事干天天拉编辑器窗口大小玩)
理论上会按照顺序更新, 但实际上很可能随缘更 ()
- 优化查找 / 替换, 使其能只使用 \n 匹配 \r
- 行尾处理, 能选择插入 CR / LF / CRLF, 以及自动统一化 (单纯阅读的话已经实现了, 但插入还是默认 \n)
- 编码处理, 添加以其它编码打开 / 保存的功能 (重构后的编码选择功能实际上被 ICU 架空了)
- 增加更多的高亮提示等 (比如查找 / 替换时高亮所有选择结果) , 这一条涉及的底层比较多所以放后面了
- 添加十六进制查看 / 编辑功能
- 接入之前自己开发的一个语法高亮