Skip to content

外部编辑器配置方法

Altair Wei edited this page Oct 26, 2019 · 10 revisions

1 外部编辑器介绍

1.1 使用场景

外部编辑器存在的意义在于弥补为知笔记原生富文本编辑器的不足,拓展客户端的编辑功能。为知笔记官方的富文本编辑器由 JavaScript 写成,并且经过混淆与压缩,几乎没有第三方开发者拓展的空间。而 WizQTClient 本身又不支持插件开发,用原生富文本编辑器来写 Markdown 简直是灾难,这些原因导致 macOS 和 Linux 平台下的客户端编辑体验极差。

基于以上理由,WizNotePlus 开发出外部编辑器特征,为用户提供自定义的第三方编辑器设置功能,以期望改善跨平台客户端的编辑体验。

1.2 实现原理

启动外部编辑器本质上就是为知笔记客户端启动一个新进程,这与用户在命令行启动某个程序在本质上是相同的。为知笔记打开每个笔记时会在系统临时文件中将笔记解压并建立缓存,而当用户通过为知笔记启动外部编辑器时,笔记客户端将会将笔记缓存文件地址传递给外部编辑器,这就是 Arguments 栏目中 %1 的含义,该符号将会在运行时被替换成缓存文件地址。

每个被传递的笔记缓存文件都会被设置一个 Watcher ,只要外部编辑器改动了该笔记缓存文件,为知笔记客户端就会收到通知,并对该笔记进行更新。这样,外部编辑器的基本功能就实现了。

1.3 如何配置

Program File

这个需要你填入外部编辑器可执行文件的地址,这在 Linux 平台十分清晰和直接。但 macOS 平台十分不同,应用程序以 .app bundle 的形式安装在应用程序文件夹里,所以不能直接填写诸如 /Applications/Typora.app 的地址,因为这不是可执行程序地址。但我们可以使用 open 命令从命令行启动应用,因此 macOS 平台下,Program File 栏目应该填写 /usr/bin/open ,具体配置请参考示例。

Name

用户自定义显示在下拉菜单中的名字。

Arguments

每个外部编辑器都至少需要一个 Positional Argument 来指明要打开的文件位置,WizNotePlus 提供了 %1 作为占位符,在运行时该占位符会被替换成当前笔记缓存文件位置。其他外部编辑器特异性的参数需要自己探索。

Use for text editor

该选项勾选状态下表示传递给外部编辑器的将会是纯文本,非勾选状态下是 HTML 。

Use UTF-8 charset

文件数据的编码方式,目前不管是否勾选都默认为 UTF-8 ,所以该选项暂时没有用途。

1.4 第三方开发

WizNotePlus 只为外部编辑器提供了两种数据类型:纯文本和 HTML 。这两种数据类型限制了外部编辑器的应用,比如某些编辑器要求特定的数据格式。

外部编辑器有很多扩展潜力,比如针对不同外部编辑提供笔记数据文件的预处理,或者在保存时对变更的内容进行预处理等等。WizNotePlus 下一个开发计划是建立插件系统,届时会提供一个类似预处理器的插件类型,以供开发者进行定制。

1.5 注意事项

  1. 在参数配置一栏,如果有必要可能需要在 %1 两边添加双引号,以避免文件夹名称中的空格被判断成分隔符。
  2. 外部编辑器无法立刻获得内部编辑器更新过的内容,必须关闭标签页重写载入笔记后才行。也就是说,外部编辑器与内部编辑器同一时刻混用时会导致内容丢失。

2 外部编辑器配置示例

2.1 Linux 下配置外部编辑器

下图是 Typora 的配置:

Linux_Typora_Setting

下图是 Vim 编辑器配置:

Linux_Vim_Setting

2.2 macOS 下配置外部编辑器

下图是 TextEdit 配置:

macOS_TextEdit_Setting

下图是 Typora 配置:

macOS_Typora_Setting

2.3 Windows 下配置外部编辑器

下图是 Typora 配置:

Windows_Typora_Setting