CS-Script
Sublime Text 3 对 CS-Script 的插件
详细信息
安装次数
- 总计 6K
- Win 5K
- Mac 357
- Linux 503
8月6日 | 8月5日 | 8月4日 | 8月3日 | 8月2日 | 8月1日 | 7月31日 | 7月30日 | 7月29日 | 7月28日 | 7月27日 | 7月26日 | 7月25日 | 7月24日 | 7月23日 | 7月22日 | 7月21日 | 7月20日 | 7月19日 | 7月18日 | 7月17日 | 7月16日 | 7月15日 | 7月14日 | 7月13日 | 7月12日 | 7月11日 | 7月10日 | 7月9日 | 7月8日 | 7月7日 | 7月6日 | 7月5日 | 7月4日 | 7月3日 | 7月2日 | 7月1日 | 6月30日 | 6月29日 | 6月28日 | 6月27日 | 6月26日 | 6月25日 | 6月24日 | 6月23日 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows | 1 | 0 | 3 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
Mac | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Linux | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
README
CS-Script.ST3
CS-Script (C# 智能感知) 用于 Sublime Text 3 的插件。基于 CS-Script 和 Roslyn 的真正 C# 智能感知解决方案。
所需最低系统配置: * .NET: v6.˟ * CS-Script: v4.4.2
检测到的系统配置: * .NET: v8.0.100 - 所需 v6.˟ * CS-Script
无法在系统中检测到所需的 .NET 运行时版本。请访问 .NET 网站 (https://dotnet.microsoft.com) 并按照说明安装所需的版本 (v6.˟)。
背景
插件
该插件允许方便地在编辑器中编辑和执行 C# 代码(脚本)。它带来了通常与完整规模 IDE 一起到来的真正的 C# 智能感知体验。这包括通常的“完成建议”、“转到定义”、“查找所有引用”以及可在 Visual Studio 中找到的许多其他功能。插件的核心是两个核心组件 CS-Script 和 Roslyn。
Roslyn 是一个开源的 .NET 代码分析和编译服务。它是构建在另一个流行的智能感知解决方案周围的语法引擎 - OmniSharp。CS-Script 插件的智能感知功能与 OmniSharp 可以提供的内容相当相似,只不过这个插件更适合执行用 C# 编写的通用脚本,而 OmniSharp 通常(虽然不是总是)是各种 ASP.NET 工具集的一部分。
CS-Script
CS-Script 是一个可移植的开源 CLR 基础脚本系统,它使用 ECMA 兼容的 C# 作为编程语言。它允许在没有专用编译步骤的情况下直接执行 C# 代码。可以说,它是当今最成熟的 C# 脚本解决方案。它在 2004 年开发,比第一个 .NET 发布晚了两年。它还出现在许多年份之前,MS 自家的编译服务(Roslyn)首次在 2014 年公开发布之前很久,这最终会带来一些 C# 脚本的元素。
CS-Script深受Python执行模型的影响。单个脚本文件即可执行C#程序,无需处理任何C#项目基础设施或C#代码的预编译。还可以导入其他脚本和程序集(DLL)。CS-Script不仅不是解释器,而是一个静态类型编译环境,因此,结合高级Python模拟缓存,它提供终极性能,与完全编译的.NET应用程序性能相当。
概述
Windows上的C# 6支持
.NET/Mono附带C#编译器。对于.NET,这种情况在C# 6(.NET v4.6)之前始终如此。在那之后,微软改变了部署方法,.NET v4.6仅包含较旧的C# 5编译器。注意:Linux上的Mono v4.6不受此问题的困扰。它仍然包含最新的C# 6编译器。
这意味着在Windows上,插件(开箱即用)仅支持C# 5语法。如果您想启用对C# 6特定功能的支持,您需要安装额外的编译器 - Roslyn。做这件事最简单的方法是安装CS-Script本身,并配置插件使用.NET v4.6代码提供者
CS-Script安装
choco install cs-script
(见https://github.com/oleg-shilo/cs-script/wiki)配置
使用set useAlternativeCompiler: %CSSCRIPT_DIR%\lib\CSSCodeProvider.v4.6.DLL
,配置如下
右键菜单 > CS-Script > 设置 > CS-Script 配置
在Sublime中使用C#脚本
CS-Script ST3插件允许方便地从编辑器直接进行C#代码的编辑和执行。任何遵循ECMA规范的C#代码都是C#脚本。尽管其他任何基于C#的运行时都要求将C#代码编译成程序集,CS-Script通过即时生成程序集直接执行C#代码,因此您不需要为执行脚本进行任何特定配置。单个脚本文件就完全足够了,因为它包含了CS-Script执行脚本所需的所有信息。
当您的C#脚本依赖于其他(源和编译)C#源模块时,您可以通过代码中的//css_*
指令以非常简单的方式来表示这一点。这些指令与Python中的import *
指令概念上相似,这些指令位于脚本顶部。CS-Script只有几个容易记忆的指令。但是,如果您忘记了这些指令,您可以通过上下文菜单或从“命令面板”调用“显示CS-Script帮助”或“显示插件帮助”命令。
或者,您可以放置光标在指令上(例如,//css_re|f
),并按F12触发“转到定义”命令以获取有关指令的完整信息。
当然,您可以在GigHib上找到完整的CS-Script文档:https://github.com/oleg-shilo/cs-script/wiki
以下是在Sublime Text 3中与CS-Script一起使用的功能概述。该概述还突出了CS-Script的主要功能
创建新脚本
创建一个新的.cs文件,包含.NET/Mono可执行所必需的标准C#内容
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
CS-Script允许执行所谓的无类脚本,这些脚本会被即时装饰上类基础设施,从而使它符合CLR所需的执行模型
//css_args -ac
using System;
void Main()
{
Console.WriteLine("Hello World!";
}
可接受的'实例入口点'签名是
void main()
void main(string[] args)
int main()
int main(string[] args)
为了启用对无类脚本的支持,您需要添加autoclass命令行参数-ac
。您可以将其添加到脚本中(通过//css_args
指令)或全局地添加到所有脚本(通过css_config文件)。
引用程序集
使用CS-Script引用程序集是通过//css_reference
(或}指令来进行的。程序集名称可以只是一个名称(对于全局程序集),或者是一个相对或绝对路径。在Windows上,.NET允许发现程序集,因此脚本引擎始终尝试将引用的命名空间解析为它们的程序集,并自动引用它们。因此,在下述代码中
MessageBox
类是可用的,因为在代码中隐式引用了System.Windows.Forms.dll
程序集。代码中
使用 System; 使用 System.Windows.Forms;
void main(string[] args) { MessageBox.Show(messages.Gritting); … }
Note, implicit referencing is only available on Windows (nature of .NET). On all other platforms the assemblies need to be referenced explicitly.
You can avoid referencing the most common assemblies in every script by setting them as default referenced assemblies in the CS-Script config file (ContextMenu > CS-Script > Settings > CS-Script Config).
#### Referencing NuGet packages
.NET offers alternative way of referencing assemblies - by referencing NuGet packages (similar to RubyGems). CS-Script allows a single step referencing for the packages with a dedicated directive:
```C#
//css_nuget taglib
using System;
using System.IO;
...
var mp4 = TagLib.File.Create(file);
mp4.Tag.Title = episode_name;
mp4.Save();
请注意,NuGet 支持将取决于系统上安装的 NuGet 管理器。然而,Windows 上的 CS-Script 完整部署(choco install cs-script
)已经包含一个 nuget.exe 副本。许多 Linux 发行版都带有预装 NuGet(尽管不一定)。
引用/导入其他脚本
引用其他脚本非常类似于 Python 的脚本导入概念。虽然没有打包限制,因此从概念上讲,它更接近于 C++ 的 #include
。而且即使对应的 CS-Script 指令是 //css_include
(或 //css_inc
)
//css_inc %shared_scripts%\messages.cs
using System;
void main(string[] args)
{
Console.WriteLine(messages.Gritting);
...
}
脚本执行
插件允许直接从编辑器执行脚本。只需使您的脚本处于活动状态,并调用 '执行'(F5)或 '执行(捕获输出)'(Ctrl+F5)。'捕获输出' 选项指示插件将脚本输出重定向到 Sublime "CS-Script”输出面板,而不是在外部终端中执行脚本。虽然这是一个方便的选项,“捕获输出”在脚本执行过程中需要用户输入的情况下在逻辑上是不兼容的,因为输出面板不允许用户输入。在这种情况下,简单的 '执行'(F5)选项更为合适。
探测目录
当从脚本中引用任何外部依赖项(例如脚本、程序集)时,脚本引擎会尝试在“探测目录”中定位依赖文件。这些目录包括:- 脚本位置 - 当前目录 - 来自 CS-Script 配置文件的搜索目录(上下文菜单 > CS-Script > 设置 > CS-Script 配置)。- 使用 //css_dir
指令定义的脚本搜索目录。
//css_dir
指令是定义脚本特定位置的一种方便方式。它支持环境变量以及绝对和相对路径:“C# //css_dir %includs% //css_dir %libs% //css_inc messages.cs //css_ref utils.dll
using System;
void main(string[] args) { Console.WriteLine(utils.ToGerman(messages.Gritting)); … }
#### Debugging
You can easily debug scripts being executed by attaching the system default debugger to the running process (script). The most convenient way of doing this is to place assert in the script code and follow the assertion prompt for attaching the debugger. If you are executing the script from CLI then you can specify the `//x` as the last parameter to trigger the assertion on the script startup.
cscs.exe my_script.cs //x
Note, the availability and functionality of the system default debugger depends on the system configuration and the operating system itself.
However sometimes using the full scale debugger may be inconvenient. In such cases you can use a built-in "debug print" functionality, which is very similar to Python `print` statement:
```C#
using System;
void main()
{
dbg.print(DateTime.Now);
}
或使用 C#6 语法:”C# 使用 System; 使用 static dbg;
void main() { print(DateTime.Now); }
And this is how the `print` output looks like:
{22/02/2017 1:08:13 PM} .Date = {22/02/2017 12:00:00 AM} .Day = 22 .DayOfWeek = 星期三 .DayOfYear = 53 .Hour = 13 .Kind = Local .Millisecond = 246 .Minute = 8 .Month = 2 .Second = 13 .Ticks = 636233656932466653 .TimeOfDay = 13:08:13.2466653 .Year = 2017
#### Show project
Any script file is sufficient and contains all the information required for the execution. The script at runtime is unfolded into the virtual project containing all dependencies resolved (referenced assemblies, imported scripts, probing directories). This project is a complete execution context that sometimes is beneficial to know. You can access this context by executing plugin's `csscript_load_proj` (Ctrl+F7) command. This command prints the all virtual project details:
文件:E:\Dev\test.cs 引用:C:\WINDOWS…\System.Core.dll 引用:C:\WINDOWS…\System.Text.RegularExpressions.dll 引用:C:\WINDOWS…\System.Windows.Forms.dll 引用:C:\WINDOWS…\System.dll 搜索目录:C:\ProgramData\chocolatey\lib\cs-script\tools\cs-script\lib 搜索目录:C:\ProgramData\CS-Script\inc 搜索目录:E:\Dev
#### Global configuration
The plugin behavior can be adjusted in the usual way as for all other Sublime plugins by editing the settings files.
And for the CS-Script settings can be accessed via context menu: CS-Script > Settings > CS-Script Config
#### Building executables
CS-Script allows converting a script into a self-sufficient executable. It is in fact quite straightforward process. CS-Script is not an interpreter as many other scripting solution but an execution environment, which converts C# (or VB) file into assembly on-fly. And as long as the assembly is compiled as an executable it can be executed on its own without the need for the script engine any more.
You can invoke "Build exe" command either from the context menu or from command palette.
#### Coding assistance services
Thanks to the fact the .NET runtime is a true type system, the type context is fully deterministic for any location in the source code. This means that for C# code as well as some other 'type system' based environments (e.g. Java) coding assistance services can deliver an extremely high level of user experience that is impossible for dynamic languages (e.g. JavaScript).
CS-Script plugin comes with the following coding assistance services:
- Code completion.
Invoked automatically on typing "." or by shortcut `Ctrl+Space`. The user experience is very similar to Intellisense that many developers are familiar with from working with Visual Studio.
- Go to definition.
Invoked by shortcut `F12` or via context menu. It navigated to the definition of the symbol under the cursor.
- Find references.
Invoked by shortcut `Shift+F12` or via context menu. It prints on output panel all locations (including imported scripts) of the code where the symbol under the cursor is referenced (used).
- Check syntax.
Invoked by shortcut `F7` or via context menu. It checks the whole code on output panel all locations of the code where the symbol under the cursor is referenced (used).
Double-clicking the error in the output panel navigates to the error location in the source code. You can jump to the next error with `F4`.
- Add missing usings.
It tries to resolve the error caused by missing `using...` directive(s). This command can be invoked by shortcut `Ctrl+.` when the cursor is placed on the word causing the compiling error. Alternatively you can hover over the word with error and this wold bring a tooltip with the error description. The tooltip is interactive and clicking the tooltip also invokes the command.
- Format.
Invoked by shortcut `F8` or via context menu. It formats the code code according default formatting style provided by Roslyn.
#### Help
The help resources are available in form of plugin documentation and online. Use either context menu to open either plugin or CS-Script help file. For the online documentation see CS-Script GitHub Wiki: https://github.com/oleg-shilo/cs-script/wiki.
#### CLI
The plugin provides access only to the part of the CS-Script functionality. If you need to to access the features that are not exposed via the plugin interface (e.g. converting script into assembly/dll) you may want to use CS-Script command line interface (CLI) from the terminal. Command-prompt on Windows and Bash on Linux. Sublime has quite a few plugins for integrating terminal with the editor. One of them "Terminal" seems to be quite fit for the task.
The CS-Script CLI user guide can be found here: https://github.com/oleg-shilo/cs-script/wiki/CLI---User-Guide
#### Plugin config
The pluging settings can be accessed via Preferences > Package Settings > CS-Script.
These are the settings values that can help to adjust the user experience according your preferences:
- auto_trigger_autocomplete
Controls automatic triggering completion suggestion on typing '.' after a word.
- auto_trigger_tooltip
Controls automatic triggering member/signature tooltip suggestion on typing '(' after a word.
- auto_tooltip_light_content
Indicates if the automatic tooltip should have lighter appearance comparing to the tooltip triggered by hovering over the word. Useful to make the tooltip less obstructive by omitting some of the tooltip content.
- error_strong_appearance
All syntax errors by default are highlighted ST3 error scope style. Using this setting can soften the appearance of the error(s)
- format_on_save
Format the code on saving.
- syntaxcheck_on_save
Check code syntax on saving.
- 'server_port'
The plugin communicates with the Syntaxer (module responsible for C# syntax parsing) via local socket (localhost:18000). If for whatever reason the port choice is no appropriate/convenient you can change it by adjusting this setting. If you do so you will need to restart Sublime.