轻量级 Markdown 写作工具:One Markdown
lipiwang 2024-11-25 14:50 5 浏览 0 评论
大家好,我是 oulvhai,MWeb 的作者,MWeb 是 macOS 和 iOS / iPadOS 下的 Markdown 写作 / 记笔记 / 静态博客生成软件。所以简单地来说我就是专门做 macOS 和 iOS 下的原生的 Markdown 编辑器软件的开发者。
现在要发的新的软件叫 One Markdown,目标用户有:
- 喜欢使用系统 TextEdit 然后想要更多配色和样式。One Markdown 还有优化的地方是:粘贴图片时不用转为富文本,它会自动转成 Textbundle 支持图文混合的文档。
- 所有文本都喜欢用 Markdown 格式,想要一个简单快速的编辑和预览软件。One Markdown 在这方面支持很好,它为速度而优化,非常快,编辑上百万字的文档都很快,经测试,在 Apple M1 下甚至能轻松处理五百万文字。
- 想要一个支持 TextBundle 的软件。TextBundle 格式简单来说就是支持图文混合的 Markdown 文档,它会将文本和文本引用到的图片合成单一的文件,方便分享和 iCloud 等云盘的同步。
另:为什么我还会在用 TextEdit?就,有时候想保存一些临时的文本,图片,或者像网页、富文本想清一清格式,就简单地切到 TextEdit,CMD + N 建一个文档,粘贴进去。当然也有很多选择,但是 TextEdit 很合适。
实际上,One Markdown 总有存在的理由。然后之前有人问到,为什么现在其它软件新版都支持所得即所见的 Markdown 编辑,然后 MWeb 的新编辑器还是保留显示所有纯文本加预览的方式?
我觉得呢,Markdown 的语法不需要所得即所见,当然图片有时候还是要显示一下,其它的话,我不觉得隐藏语法是件好事,特别是像 Markdown 这种语法可读性很高的。
另外就是,所得即所见的方式的软件,制作起来比较复杂,因为要处理文本和渲染一对一的关系,而 Markdown 语法相对简单,一个不好就会更改原来的文本。当前的方式,对于 MWeb 这种个人开发的软件来说,更好控制复杂性,维护成本更低,然后当然,软件也更便宜一些。MWeb 其实有信心做到不用做大版本付费更新这种事了。
这篇文章介绍的是我最新开发的软件 One Markdown,目前只有 macOS 版,2 周后会有 iOS 版,欢迎在 这里 下载试用。
One Markdown 简介
One Markdown 是一款简单快速、轻量级的支持纯文本、Markdown 和 Textbundle 的编辑器。它诞生于一年前 MWeb 的编辑器改进计划,有以下特色:
边编辑边预览模式下,编辑的内容和预览的内容现在能精准对上了,然后由于采用了 WKWebView,性能也大大提升。
收费模式
One Markdown 是免费有内购的 App,它的编辑器是准备整合进 MWeb 中的,所以在整合进 MWeb 前,不会锁定任何功能,以便于 MWeb 用户尝试和使用。它的收费模式是一次付费、永久使用的买断制,并且 macOS 平台和 iOS 平台是分开销售的。
目前,One Markdown 的 macOS 版定价是半价 ¥25,整合进 MWeb 之后,将锁定一部分功能并恢复原价(¥50),即将推出的 iOS 版定价相同。
我会尽快完善这个编辑器并整合进 MWeb,这样轻量级的选择是 One Markdown,功能完善且强大的选择是 MWeb。
一些时间表
功能介绍
文档类型
在 One Markdown 中,新建文档和仅输入了文本的未保存文档在保存时,可以选择保存为纯文本、Markdown 或 TextBundle。如果是未保存的文档,在插入图片后,将自动变为 TextBundle 文档,保存时将不能保存为纯文本或 Markdown 文档,只能保存为 TextBundle 文档。所以如果要新建纯文本或 Markdown 文档,最好在新建文档后先保存一下,再进行编辑。
图片显示
在 One Markdown 中,在编辑器中显示图片有四种选项,分别为:显示图片、显示为缩略图、浮动显示图片和不显示图片,点击工具栏上的预览按钮(眼睛图标)即可设置,也可以在偏好设置中设置。
如果选择浮动显示图片,光标移动到图片语法中时,会在浮动窗口中显示图片,效果如下图所示。要注意的是,在边编辑边预览模式下,将不会显示这个浮动框。
优化列表代码块和 HTML 支持
得益于 CommonMark 标准和 GFM,One Markdown 在列表中写代码块支持得更好了,对 HTML 本身的支持也更好了,如下图所示,这是 MWeb 当前的编辑器做不到的事。
表格插入和编辑
点工具栏上的「插入表格」按钮时,将显示插入表格的辅助界面,如果光标移动到表格语法中,插入表格按钮将变成「编辑表格」按钮,如下图的示:
界面中的「格式化输出」复选框如果勾上的话,则会生成整齐的 Markdown 表格文本,但是这个功能在中文环境下效果不好,这是因为英文字符和中文字符宽度不同,无法很好对齐。
数学公式部分的改动
MWeb 目前的数学公式是使用 $ 和 $ 符号,这种方法在 One Markdown 中不再支持,转而采用 CommonMark 中本身的代码块语法来支持。CommonMark 中的行内代码和代码块的语法有很高的扩展性,可以随意扩展。
One Markdown 采用了 ``inline math`` 作为数学公式的行内语法,```math block math ``` 作为数学公式的块语法。然后 `code` 仍然是行内代码的语法, ``inline math`` 在 CommonMark 中也是行内代码,但是在 One Markdown 中会渲染成数学公式。这样做的好处是,原 Markdown 文档发布到不支持数学公式的环境时,会以代码显示,这样就会显示原本的公式文本,不会太过影响阅读。
同样,One Markdown 也会显示一个浮动窗口来辅助数学公式的输入,效果如下图所示:
ECharts 和 mermaid 画图支持
MWeb 原本支持 ECharts、mermaid、Graphviz、plantuml 等,One Markdown 目前仅支持 ECharts 和 mermaid。主要原因是 Graphviz JS 版不再维护,plantuml 需要连接它的线上服务,然后 mermaid 支持的画图类型也变多了,可以满足很多需求了。
MWeb 用户不用担心,One Markdown 的新编辑器整合进 MWeb 后,将继续支持 MWeb 原来的画图库。
One Markdown 还会显示一个辅助输入的浮动窗口,如下图:
显示 Markdown 文档内的本地图片
如果使用 One Markdown 打开的纯文本或 Markdown 文档中有引用到本地图片,打开时会显示如下图的提示窗口:
如窗口提示所说,默认的情况下,One Markdown 是无法读取你打开的文档之外的文件的,你需要授权 One Markdown,它才能读取这些引用的图片并显示。要注意的是,目前仅支持显示当前文档下的图片,如果文档引用到了其他位置的图片,是无法显示的。
如果你不想每次都点授权,可以去偏好设置增加常用的文件夹,这样当打开这些文件夹内的 Markdown 文档时,将不再显示这个提示。
把多张图片合成一张
One Markdown 也支持这个在 MWeb 中已有的功能,这个功能在某些情况下非常方便。要使用这个功能,请点击工具栏上的插入图片按钮,选择「把多张图片合成一张…」即可,如下图所示:
生成 GitHub 格式的 TOC
点击菜单「语法 - 生成 GitHub 格式的 TOC」可以使用这个功能,使用后,将在光标位置插入 GitHub 格式的 TOC。原本 MWeb 的 [TOC] 语法将不再支持,主要原因是这个方法比较灵活和标准。在整合进 MWeb 时,可能会加一个选项,变相支持 [TOC] 语法(实际是调用这个功能)。
其它功能和反馈
其它功能都不是很重要,就暂时不一一说明了,所有功能都在菜单和工具栏上,感兴趣可以试试。
如果有任何问题,欢迎联系我,联系方法可以使用 One Markdown 软件的菜单: 帮助 - 发送建议。
你可以在 App Store 下载 One Markdown。
相关推荐
- 软件测试|MySQL CROSS JOIN:交叉连接的详细解析
-
简介在MySQL数据库中,CROSSJOIN是一种用于生成两个或多个表的笛卡尔积的连接方法。CROSSJOIN不需要任何连接条件,它将左表的每一行与右表的每一行进行组合,从而生成一个包含所...
- 「MySQL笔记」left join-on-and 与 left join-on-where 的区别
-
1.摘要关于这两种写法的重要知识点摘要如下:left-join时,即使有相同的查询条件,二者的查询结果集也不同,原因是优先级导致的,on的优先级比where高on-and是进行韦恩运算连接...
- MySQL中的JOIN——联合查询的基本语法
-
MySQL中的JOIN指令用来将两个或多个表中的数据进行联合查询,根据连接条件来匹配记录,从而得到需要的结果集。在MySQL中,常见的JOIN类型包括INNERJOIN、LEFTJOIN和RIGH...
- MySQL 中的 CROSS JOIN:强大的连接工具
-
CROSSJOIN在MySQL里是一种挺特别的连接操作,它能弄出连接表的笛卡尔积。这就是说,要是表A有m行,表B有n行,那ACROSSJOINB的结果就会有m*n...
- 大厂必问:MySQL 三表 JOIN 操作的解析与性能优化,效率又如何?
-
大厂必问:MySQL三表JOIN操作的解析与性能优化策略,效率又如何?点击关注,开启技术之旅!大家好,这里是互联网技术学堂,无论你是一名程序员、设计师、还是对技术充满好奇心的普通人,都欢迎你加入...
- 面试题:MySQL 的 JOIN 查询优化(mysql查询优化方法)
-
MySQL的JOIN查询优化是提升数据库性能的关键环节。以下是综合多个技术文档的核心优化策略,按优先级和实现难度分类:一、索引优化:性能提升的基础为连接字段建立索引确保参与JOIN的列(通常...
- Flink中处理维表关联技术实现路径
-
在Flink中处理维表关联大体氛围TableSQLLookupJoin和DataStream算子函数,主要技术实现路径:I.FlinkSQL/TableAPI中的Lookup...
- 深入剖析Zookeeper原理(一)整体设计
-
1.ZK集群架构设计与特性1.ZK集群架构设计:ZK主要分为三种角色:Leader(领导者):一个Zookeeper集群同一时间只会有一个实际工作的Leader,它会发起并维护与各Follwer及...
- 多种负载均衡算法及其Java代码实现
-
首先给大家介绍下什么是负载均衡负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡,英...
- 一分钟了解SpringCloud中的ribbon到底是什么,原理是啥?
-
1.概念ribbon是一款客户端负载均衡器,用于微服务之间的负载均衡。首先,什么是客户端负载均衡?如图,ribbon可以通过注册中心获取服务列表,然后自己执行自己的负载均衡策略来决定要访问哪个微服务,...
- Step by Step之腾讯云短信-验证码实践
-
在商城小程序和前端上线用了一阵子之后,用户提出了体验提升的需求,如忘记密码、绑定用户、快捷注册等,作为业界最佳实践的短信验证码登录、重置密码和注册等功能开发也就提上日程了,本文就以重置密码为例,将验证...
- 10分钟入门响应式:Springboot整合kafka实现reactive
-
Springboot引入Reactor已经有一段时间了,笔者潜伏在各种技术群里暗中观察发现,好像scala圈子的同仁们,似乎对响应式更热衷一点。也许是因为他们对fp理解的更深吧,所以领悟起来障碍性更少...
- 使用java随机生成有个性的用户名,LOL地名+水浒传,合计2808个
-
*随机生成用户名*取水浒传108好汉名字*取LOL地名26个,组合而成*一共可以生成2808个不同特色的用户名如果你在上网的时候,用户名难取的话,这里有很多可选择的用户名,现提供100个...
- 深入理解Math.random()的概率分布特性
-
直接上源码/***Returnsa{@codedouble}valuewithapositivesign,*返回一个带符号的double类型的数字,说人话就是返回一个非负...
- 编程英文 - 创建/生成/构建 (create/generate/build)
-
在软件开发中,create、generate和build这三个词经常被用到,它们都与"创造"或"产生"某些东西有关,但在具体使用场景和含义上有所不同。基本含义creat...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 软件测试|MySQL CROSS JOIN:交叉连接的详细解析
- 「MySQL笔记」left join-on-and 与 left join-on-where 的区别
- MySQL中的JOIN——联合查询的基本语法
- MySQL 中的 CROSS JOIN:强大的连接工具
- 大厂必问:MySQL 三表 JOIN 操作的解析与性能优化,效率又如何?
- 面试题:MySQL 的 JOIN 查询优化(mysql查询优化方法)
- Flink中处理维表关联技术实现路径
- 深入剖析Zookeeper原理(一)整体设计
- 多种负载均衡算法及其Java代码实现
- 一分钟了解SpringCloud中的ribbon到底是什么,原理是啥?
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)