如果只是想写几句试验代码,Visual Studio显得有点大材小用。因此一些开发者会选择轻量级的编辑器,如Notepad++,来满足编写脚本的需要。Oleg Shilo向我们介绍了他的项目,一个优秀的基于CS-Script的Notepad++的插件。

\

InfoQ:CS-Script是什么?它与普通的C#有什么区别?

\

\

Oleg:简单来说,CS-Script是一个基于CLR的运行时环境,可以执行用C#编写的脚本。值得注意的是,CS-Script并不是一个解释器,而是封装了微软或Mono C#编译器的shell。因此它与普通的C#没有什么不同。实际上,它的脚本引擎面向的也是ECMA兼容的“单纯功能”的C#,与用Visual Studio或MonoDevelop编译成程序集的C#没有什么区别。

\

描述CS-Script最简单的方式是:我们可以用C#编写算法,编译成程序集,然后直接执行该程序集,或在宿主应用程序中加载并执行。但CS-Script可以跳过编译阶段,而立即加载并执行代码,将C#代码当做脚本来处理。换句话说,运行时的C#脚本就是一个动态编译的程序集。

\

当然,实际情况要比这复杂得多,而且CS-Script提供了众多吸引眼球的特性:自定义JIT编译、省略类的语法、自动命名空间到程序集的映射、接口对齐等。

\

CS-Script现在已经9岁了,并且有一批用户。MediaPortal或FlashDevelop就是基于CS-Script构建的。它还被用于AutoCAD插件、自动化和机器人、游戏和规则引擎。

\

CS-Script受到了Python的启发和影响。尽管它们面对的是完全不同的运行时范式,但CS-Script还是从Python借鉴了不少有用的想法,如多脚本执行、预编译等等。

\

\

InfoQ:为什么会为Notepad++创建一个插件?

\

\

Oleg:原因有很多。在Windows上开发的程序员很少有没听说过Notepad++的。对很多人来说,它是“必备”的源代码编辑器。能够获此殊荣,Notepad++是当之无愧的,因为它具有优秀的架构和近乎完美的实现。但除了这些赞誉,它还有一定的上升空间。

\

我认为Notepad++的“自动补全”功能还有点简陋,还不足以成为智能的代码辅助工具。它只是按文件类型分组的一些“高频词”而已。

\

我坚信这样一个很牛的编辑器应该变得更好。因此我决定为Notepad++实现一个C#的智能感知解决方案。

\

我想让Notepad++能拥有与Visual Studio同种级别的智能感知。同时还包括“转到定义”、“查找引用”、“显示方法信息”、“添加缺少的‘using’”和代码格式化。这就是这个插件诞生的缘由。智能感知相关的功能基于NRefactory,但插件的核心是CS-Script。并且由于插件使用了脚本引擎,因此可以在Notepad++中直接执行C#代码。

\

当实现完成后,我又催生了其他一些想法。因此又发布了另一个Notepad++插件(NppScript)。它使用C#脚本对Notepad++本身进行自动化。实际上每个这样的脚本自身,加上一些相关的插件特性(工具条图标、快捷键、菜单项),都可以看成是一个插件。下面的截图展示了这一想法。

\

(点击图像放大)

\

\

\

另一个原因是因为CS-Script。尽管有了Visual Studio扩展和Windows Explorer Shell扩展,我还是觉得CS-Script不够圆满,没有一个专门的富编辑器。我当然知道Visual Studio提供了无与伦比的“编辑能力”,但它也不是“银弹”。我想让C#和CS-Script用户拥有一个强大且轻量级的编辑器,不需要考虑任何部署和license的问题。

\

3年前我甚至认真地尝试着开发这样一款编辑器。我花了大量时间对SharpDevelop做反向工程,并且几乎完成了一个为C#量身定做的编辑器(代码名为UltraSharp)。它是一个基于编辑器的自定义的WinForm,包装了NRefactory 5预览版。但其性能和编辑功能都不能让人满意。因此我放弃了这个项目,转而专注于在Visual Studio中集成CS-Script。我虽然取得了成功,但仍旧心仪永久免费、性能卓越、轻量级的Notepad++。

\

对于这个插件,我还有一个不太明显但却强烈的动机。我们日常工作如此复杂。框架、工厂、模式、设计原则……我们几乎忘记了编程的乐趣。我不止一次地在文章中看到介绍批量重命名工具、下载器、目录同步工具或仅仅是又一个MP3文件标签组织工具。这些工具常常是为了引出全功能的应用程序开发(或部署方案),但在很多情况下,同样的工具可以仅用几行代码实现:

\

\

\foreach(string file in Directory.GetFiles(\".\

Oleg Shilo:基于CS-Script的Notepad++插件相关推荐

  1. Notepad++插件总结

    Notepad++中常用的插件 1.4. Notepad++中常用的插件 1.4.1. 插件管理器: Plugin Manager 插件功能:此插件可以帮你管理插件,包括查看当前已经安装的插件有哪些, ...

  2. Notepad++ 插件之 TextFX (安装及作用)

    From <安装:打开 notepad++  插件 -> Plugin Manager -> Show Plugin Manager -> available ->选中 ...

  3. 20款Notepad++插件下载和介绍

    转自:http://www.kuqin.com/developtool/20090628/59334.html Notepad++从3.4版本开始支持插件机制,让用户可选择的为本身已经优秀的Notep ...

  4. Vue项目中使用基于pdf.js的vue-pdf插件在pc浏览器下阅览PDF文件

    最近项目中需求为在浏览器上阅览PDF格式的文件,之前没有写过,随即上网查阅,发现大家常使用的为两个插件. 其一是火狐出品的pdf.js,github地址:https://github.com/mozi ...

  5. jQuery html5Validate基于HTML5表单验证插件

    更新于2016-02-25 前面提到的新版目前线上已经可以访问: http://mp.gtimg.cn/old_mp/assets/js/common/ui/Validate.js demo体验狠狠地 ...

  6. [转]20款Notepad++插件下载和介绍

    为什么80%的码农都做不了架构师?>>>    Notepad++从3.4版本开始支持插件机制,让用户可选择的为本身已经优秀的Notepad++添加更多强大的功能.下面是20款Not ...

  7. 出位的template.js 基于jquery的模板渲染插件,简单、好用

    找了好几款基于jquery的模板渲染插件,无一感觉很难用(教程较少.绑定不统一),也可能我智商问题,比如jquery template.js .jtemplate.js. 然后在github上找到这一 ...

  8. notepad++插件介绍

    Notepad++因为其强劲的插件支持,越来越受到编程爱好者的喜欢.很多优秀的插件现在已经默认安装了,下面是100多款受欢迎的Notepad++插件的介绍和下载地址. XML Tools 这个插件是包 ...

  9. 基于jQuery的弹窗小插件

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" ...

  10. 13款基于jQuery Mobile的布局插件和示例

    现在已经进入了移动互联网时代,因此将你的网站迁移到移动设备上就显得比较重要的.问题是,如何在移动设备的小屏幕中呈现你的网站中的所有内容呢? 本文介绍13款基于jQuery Mobile的布局插件和示例 ...

最新文章

  1. PN结中存在的Boltzmann常数
  2. 将不确定变为确定~整形变量是否可以进行位运算(像枚举类型一样)
  3. php浏览器头部获取,如何获取PHP以显示从浏览器收到的标头?
  4. OS- -文件系统(三)
  5. MongoDB在linux下的启动
  6. ORACLE 等待事件
  7. 需求工程:加强监理,规避风险(转载)续三
  8. 3种常见的渗透测试漏洞总结,快来收藏√
  9. 5开发 时间格式化_2020年,前端开发者必备的10个VS Code扩展插件
  10. 广数系统980tdb系统说明书_不同数控系统中各个倒角指令的用法
  11. 编程语言-初学者常见的几个问题
  12. 让电脑「读懂」你的思想——java工程师的职业规划
  13. 动态规划求最大工作价值(java实现)
  14. 集成学习(ensemble learning)基础知识
  15. Ubuntu的一些高(sao)效(cao)率(zuo)工具
  16. Windows 2003 从Oracle 9201 update to 9208
  17. 在vue3中使用markdown编辑器
  18. android图片做平移动画,Android中用Matrix实现ImageView里的图片平移和缩放动画
  19. 基于IPFS去中心化相册以太坊Dapp
  20. Ubuntu 系统开机卡住,解决

热门文章

  1. shell 脚本定时监控Linux内存清除缓存
  2. [HAOI2006]聪明的猴子 题解
  3. 纯Javascript实现鼠标点击特效(烟花特效)
  4. 基于Java+Swing实现记事本-完美版
  5. android光标Cursor
  6. html让光标位置,科技常识:html5中contenteditable 光标_如何设置光标位置
  7. android下划线链接,android7.0 TextView去除超链接下划线就这么难吗?
  8. 重积分 | 高斯公式使用的四种情况
  9. JENKINS中maven使用jdk8和jdk11环境
  10. Halo2学习笔记——设计之Proof和Field实现(3)