尝试玩了一下vscode插件,困惑着如果有人想启动一个vscode instance,只想读代码,不想无意中修改了代码。查了一下github上vscode的issue,有一些人提,但是都没有解决方法;还有一些人说看能不能拿到moanco editor的instance就解决问题了,然后下面就是一个回复“不可能”就close了。那怎么实现vscode打开文档是read-only模式呢?
其实做一遍,就发现非常简单。当然,我们目前的需求只是无意按键后不要修改文档,暂时不想管太多比如复制/粘贴,比如格式化文档后怎么办。
代码:https://github.com/stallpool/vscode-readonly-extension
编译好的直接能安装的vsix文件下载:https://github.com/stallpool/vscode-readonly-extension/releases/tag/1.0.0
二话不说,先上code。这里其实就是拿两个samples拼接出来的一个extension,在github的repo上也注明了reference。一个是 statusbar 的sample extension,一个是 vim 的sample extension。
原理就是 editor 有一个 type
command,当输入之后就会触发这个command,所以把这个command覆盖掉就能做到在typing的时候什么都不发生了。为了能有个开关,定义一下configuration的item,来一个 readOnly
变量控制,如果开,那么什么都不发生,否则将 type
的执行丢给 default:type
去执行,这样又可以键盘输入了。
statusbar
就是定义一个statusbar item,然后开关给出当前readonly的文本描述。再注册一个命令开关readonly模式。
原理知道了,想必大家也都清楚怎么禁止 copy/paste 了,进一步加强readonly,这都是后话了。Enjoy.