妆罢低声问夫婿, 画眉深浅入时无——我的年度Markdown笔记软件VNote

2016年10月1日,我开始写一个属于自己的笔记软件来满足自己的一些需求,那就是 VNote 。随着开发的进行迭代和越来越多用户的加入,对于Markdown的认识以及VNote的定位也在不断变化。对于自己心中理想的Markdown笔记软件也有一定想法。

下面我想说说VNote的一些使用或设计的考虑,一来和大家交流一下Markdown的心得,二来也听听大家对VNote的一些看法。希望我的2017年度最佳软件,也能获得您的一份认同!

Markdown与实时预览的纠葛

说起Markdown,大家想到的是什么呢觉得是实时预览。之前我给大家推广VNote或者用户刚进讨论组的时候,不少人的第一反应是“VNote支持实时预览吗。

这些年,我用过的软件

为知笔记

为知笔记,作为拥有Linux客户端的云笔记软件,其实是非常不错的。但是,它对于Markdown的支持只能说是马马虎虎。

为知笔记当时的一个优点是支持直接贴图和显示图片,在几年前应该是比较先进的。后来毕业设计,需要大量记录代码阅读笔记,往往需要在一篇很长的文章里面的不同标题之间进行跳转,被为知笔记实在虐待得不轻,于是转投CMD Markdown。

CMD Markdown

Typora

但是,使用了几天后,发现Typora其实并没有想像的那么完美:

  • 我输入的文字,Typora马上就转换为渲染后的元素,如果需要往回修改的话,你需要把光标放那然后等上一会,才会显示Markdown的文本。我觉得我对我的内容失去了掌控,我需要清楚地知道我输入的文本是什么,而不是向我屏蔽细节;

  • 没有Vim模式。而且即使有Vim模式,因为Typora屏蔽了一些标记元素,所以使用Vim也无法随心所欲;

  • 渲染各种问题;

  • 其实也并没有完美解决割裂的问题。因为一些Markdown文本标记还是被屏蔽了,所以可以说Typora是以一种相对比较好接受的割裂感替换原生的割裂感;

就这样,我放弃了Typora!

Vim

接下来的三个月,我就使用Vim来记录笔记。但Vim来记录也有一些遗憾的地方:

  • Vim无法显示 页,因此只能通过外部浏览器来看到渲染后的效果;

重新认识Markdown

通过和其他的一些标记语言(如reStructuredText)的对比,不难发现,Markdown作为一个轻量级的标记语言,在设计的时候就是为了易读性而牺牲了表达能力和严谨性,选取一些有意义的标记以及非常有限的几个元素,从而既能在纯文本的时候易读易写,也能在渲染后取得一个较好的排版功能。这样使得用户可以在编写的时候专注于内容,无需关心排版和格式。

通过精心设计的元素高亮,清晰地向用户展示文章的脉络,这样我们的目的不就也八九不离十了吗这个角度(以及屏幕空间的角度)来说,”实时预览“真的没有必要啊!我实在是不习惯在左边修改一点后,又得在右边定位并看看修改后的效果;也不习惯在右边阅读的时候,发现一个错误,然后到左边来定位并修改。

第一印象

因为时间迫切,VNote在设计和实现的时候,很多非本质的东西都是采取”能用就好“的原则,因此使用默认的标题栏、菜单栏、工具栏和状态栏。所以总的来说是”朴实“路线。当然,也有很多用户抱怨说界面太丑,也有说是啥Windows 98式的界面(我觉得这种说法是极度不恰当的,起码也是Windows XP吧。于是,我花了三周的时间来实现了VNote的主题功能,并定制了3套默认主题。

需要提一下的是,我用的为知笔记是去年安装好的版本。虽然不是最新版,但却也符合我当初使用了几年的体验,所以这里就不折腾最新版了。

在这张图里面,我们可以看到:

  • 为知使用HTML来保存Markdown文本,所以里面的内容可以应用不同的样式。于是,有一个可能是里面的行距、字体大小等会很凌乱(特别是在粘贴一段复制的HTML文本的时候),时不时地需要手动清除一下格式;

  • 为知对于Markdown所有元素都是一视同仁、无区别对待的;一眼看上去,完全抓不往重点;

  • 对于Markdown元素没有任何提示,即使是老手可能也会犯那么一点语法错误,需要切换到阅读模式才能发现;

CMD Markdown

另外,Typora没有Vim模式,即使以后支持了,由于隐藏了很多标记,估计也很难协调。

VNote

用了一段时间,实在受不了这种障眼法式的实现,首先是重写了,通过一些小技巧,在一个纯文本的控件里显示图片,但后来发现滚动条还是针对行数而忽略了图片的像素高;于是,认真读了相关的代码,重写了相关底层的类,终于实现了现在的图文并排效果(所以,开发者有强迫症还是一件好事)。

快捷键

作为一个Vim使用者的重度键盘党,我期望VNote中高频的操作都能通过键盘来进行。如何设计和安排快捷键是一个比较棘手的问题。在设计的时候,我还希望VNote的快捷键能尽可能不要干扰系统的快捷键。

首先,Vim模式是肯定要支持的。刚开始的时候,我是自作聪明地实现了一个不伦不类的Vim模式,用户先按,然后进入一个临时的Vim模式,3秒内接受Vim的移动命令。后来,决定重构,自己实现一个高仿的Vim模式,后来用了7000多行的C++实现了一个具备基本功能的Vim模式。但那时候的Vim在普通模式是没有块光标的。后来,强迫症发作,认真读了Qt的一些代码,总算巧妙地实现了块光标。

借鉴Vim,VNote引入了舰长模式,即通过一个前导键来实现一系列的快捷键序列。这样,就可以有大量的按键资源可以分配。另外,还有一个展览模式,进入该模式后,各个主要部件都会显示两个字母,按下这两个字母,就能跳转到对应的部件上。

VNote展览模式

从程序员中来,到程序员中去

VNote还借鉴了以下特性:

  • 多标签页;

  • 窗口分隔;

  • 片段;

  • 元数据(幻词);

  • 高亮当前行、所选词;

结语

开发了一年半,我觉得VNote目前已经超出我当时的预期了,例如当初完全没想到会实现几套皮肤。VNote几乎占用了我所有的业余时间。作为一个开源项目,我一直都希望能吸引更多的人参与,像滚雪球一样所项目“滚”起来(这也是为啥我一直没有接受捐赠的原因)。但目前基本还是我一个人来开发和维护,考虑到可持续发展,所以还是开始接受捐赠。顺带强调一下,Star or money, either works,流行度也是驱动开发者的强劲动力。

感谢所有支持VNote的用户,特别感谢openSUSE、Arch Linux和macOS 区的热心用户帮忙打包。

最后,欢迎尝试VNote,或者这就是您想要的!

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树MarkDown入门MarkDown介绍24896 人正在系统学习中 相关资源:GLONASS卫星位置计算与程序实现_葛奎_glonass_卫星位置__matlab…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年1月12日
下一篇 2018年1月12日

相关推荐