第三章 - 代码编辑器
SnapDevelop 代码编辑器提供了相当多的功能,让您可以轻松高效地编写和管理代码,例如,可以在单个或多个文件、当前项目或整个解决方案中查找和替换文本;可以使用 大纲(Outlining) 功能折叠和展开代码块,可以使用 跳转到定义 和 查找所有引用 等功能查找代码。
在 IDE 中移动
窗口或文件切换
您可以使用以下方法在代码编辑器中切换打开的文件或切换工具窗口:
按 Ctrl + “-” 或 Ctrl + Shift + “-” 键可以在代码编辑器中按文件的最后访问顺序向前或向后切换打开的文件。
按 Ctrl + Tab 键可在活动文件中切换。只需按住 Ctrl 键并反复按 Tab 键,以及向左和向右的箭头,直到切换到所需的文件。
点击编辑器右上角的箭头图标,然后从列表中选择所需文件。
键盘快捷键
几乎所有的菜单都定义了键盘快捷键。
代码编辑器
基本功能
本节介绍 SnapDevelop 代码编辑器的基本功能,它可以帮助您非常高效、轻松地编辑代码。根据不同的语法,代码编辑器提供了不同的功能。
C# 语法具有以下所有功能:代码高亮、代码折叠、代码快速提示信息、代码方法签名帮助、代码修复、代码重构、符号重命名、删除未使用的using并排序、代码片段、代码自动完成、代码元信息、代码诊断、代码格式化等。
Grpc 语法具有以下功能:代码高亮、代码折叠、代码快速提示信息、代码诊断、代码自动完成等。
Vue 语法具有以下功能:代码高亮、代码折叠、代码快速提示信息、代码诊断、代码自动完成、代码片段等。
JSON、XML 及 YAML 语法具有以下功能:代码高亮、代码折叠、代码诊断等。
快速信息
当您把鼠标悬停在代码元素(例如类型、变量等)上,或者把光标插入点放到元素中然后点击工具栏的 显示快速信息 按钮(),关于该元素的相关信息将会自动显示。
引用计数
当您编写代码时,您会在类、方法、接口、枚举索引等上方看到一个引用计数。引用计数表示该元素被引用了多少次。当点击引用计数时,将显示哪些代码引用了该元素。
代码高亮
代码语法比如关键词、类型、方法名等用不同的颜色表示以便区分。您可以定义这些颜色。详细信息,请参考 字体和颜色。
代码诊断
当您编写代码时,可能会在代码中看到不同颜色的波浪下划线。红色波浪下划线表示语法错误,绿色下划线表示警告。如果鼠标悬停在错误上,则会马上显示针对该错误的修复建议。
代码编辑器的左下角将显示错误和警告的数量,以及提供导航按钮来快速定位引起这些错误和警告的代码。
大括号匹配
当点击某个大括号时,该大括号以及跟它配对的大括号将自动突出显示。这可以帮助您快速找出哪些大括号放错了位置或丢失了。
代码自动完成(CodeAssist)
当您在代码编辑器中输入字符时,或者插入光标后按 Ctrl + J 时,代码自动完成功能会按字母顺序显示所有可能输入的选项,并突出显示与输入字符最匹配的选项。
您还可以通过列表底部的图标来显示某一种或多种类型的代码选项,例如:代码片段、类、关键词、委托、枚举、结构、命名空间、接口、参数等。允许同时选中多种类型。
代码片段
在代码自动完成功能中的建议列表中,您可以点击列表底部的 仅显示CodeSnippets 图标()然后双击所需的代码片段,代表代码片段的符号将会被插入到代码中,这时,快速按两下 Tab 键激活代码片段,完整的代码片段将会显示出来。
行号
默认情况下行号会显示在代码编辑器的左边距中。如不需要显示行号,请到 工具 > 选项 > 文本编辑器 > 常规 中禁用 行号边距 选项。
变更追踪
如果在 工具 > 选项 > 文本编辑器 > 常规 中启用了 跟踪更改 选项,则自文件打开以来所做的未保存更改将会在代码编辑器的左侧用黄色竖线表示。
代码和文本选择
您可以框选或者鼠标拖选代码。如使用框选,需要先按住 Alt 键后再拖动鼠标选择代码(或按 Alt + Shift + 方向键),从第一个字符到最后一个字符将形成一个方框,方框内的字符处于选中状态。这时输入、粘贴、或删除任何内容都将同时作用到框中每行的同一位置。
字体缩放
您可以在代码编辑框中按住 Ctrl 键后然后滚动鼠标滚轮来放大或缩小字体。也可以通过代码编辑框左下角的缩放标尺来调整字体的比例。
将 JSON/XML 粘贴为类
在 SnapDevelop 中复制和粘贴 JSON 或 XML 代码时,可以自动将代码转换为类。
具体操作如下:复制 JSON 或 XML 代码,然后在菜单栏中选择 编辑 > 定制粘贴 > 把 JSON 粘贴为类 或 把 XML 粘贴为类 可以将 JSON 或 XML 代码自动转换为类并粘贴到编辑器。
例如,如果您选择 把 JSON 粘贴为类,您将获得一些格式如下的类:
public class Rootobject
{
public Logging Logging { get; set; }
public string AllowedHosts { get; set; }
public ConnectionStrings ConnectionStrings { get; set; }
}
public class Logging
{
public LogLevel LogLevel { get; set; }
}
创建 GUID
SnapDevelop 提供了一个 GUID 生成工具,允许您以某种格式来生成 GUID,并将其复制到剪贴板。
要打开 GUID 生成工具,请在菜单栏中选择工具 > 创建 GUID。在 创建 GUID 窗口中,您可以选择一种 GUID 格式。当您选中格式前面的单选框后,结果 文本框中将显示自动生成的 GUID。您可以点击 重新生成 GUID 生成一个不同的 GUID。或者点击 结果 文本框中的 复制 图标将 GUID 复制到粘贴板。或者点击 插入 按钮将 GUID 插入到光标所在位置。
自动换行
您可以在工具 > 选项 > 文本编辑器 > 常规 对话框中选择或取消根据单词换行选项。如果选择该选项,超出编辑器窗口当前宽度的长行的一部分将显示在下一行。
使用 “+” 连接字符串
如果在字符串中按 Enter 开始新行,则两个字符串会自动使用 “+” 连接。
多光标编辑
您可以对多处文本(多光标)同时进行编辑。为此,请按住 Ctrl 键并使用鼠标点击多个位置插入光标或者选择多处文本,然后编辑文本。
撤消和重做
您可以在菜单选择 编辑 > 撤销 或 编辑 > 重做 对当前 SnapDevelop 会话中的操作运行撤消和重做命令。
参数信息帮助
当您将光标插入点放到某个方法的参数括号之前,便可以直接激活该方法的参数信息帮助。
高级功能
当代码编辑器处于打开状态时,工具栏上的 编辑 > 高级 菜单提供了多种高级编辑功能。
设置文档的格式 -- 统一缩进文档中的所有代码。
设置选定内容的格式 -- 统一缩进文档中选定的代码。
注释选定内容 -- 将注释字符添加到选定的行,如果未选择任何字符,则添加到当前行。
取消注释选定内容 -- 从所选行或当前行中删除注释字符。
转换为大写 -- 将所有选定字符更改为大写。
转换为小写 -- 将所有选定字符更改为小写。
增加行缩进 -- 在所选行或当前行的前面添加空格以增加缩进。
减少行缩进 -- 在所选行或当前行的前面删除空格以减少缩进。
大纲显示(代码折叠)
大纲显示 功能允许您根据代码的层级来折叠或展开代码。要使用此功能,请在右键菜单中选择 大纲显示。我们以以下代码为例,演示如何执行各种大纲操作。
使用 大纲显示 功能,您可以:
应用默认大纲展开:应用程序默认使用的大纲展开设置。
折叠到定义:折叠所有类型的成员。
展开所有大纲显示:展开所有层级。
隐藏选中区域:隐藏当前选中的代码块。
停止隐藏当前区域:当代码块处于隐藏状态时,选择此菜单可以将代码块重新显示出来。
停止大纲显示/启动自动大纲显示:隐藏或显示整个文件的所有大纲信息。
切换所有大纲显示:将所有层级设置为相同的折叠或展开状态。 如果一些区域为展开状态,一些为折叠状态,那么将展开折叠区域。
切换大纲显示展开:切换当前大纲层级的折叠或展开状态。
注意:您可以在编辑器中复制处于折叠状态的代码,但是在粘贴后代码将自动切换成展开状态。
当鼠标悬停在大纲边距上时,当前可折叠区域将高亮显示。此高亮颜色可以修改(请选择菜单 工具 > 选项,在 选项 窗口中,选择 文本编辑器 > 字体和颜色,在 显示项 列表框中,选择 可折叠区域)。
查找和替换
查找和替换文本
您可以按 Ctrl + F 或 Ctrl + H,或选择菜单 编辑 > 查找和替换 > 快速查找 或 快速替换 来查找和替换文本。
如果您在当前文件中选择了一串字符,然后按 Ctrl + F 或 Ctrl + H,查找/替换框将显示在代码编辑器的右上角。同时,当前文件中的所有匹配的字符串都会高亮显示。匹配高亮颜色可以修改(请选择菜单 工具 > 选项,在 选项 窗口中,选择 文本编辑器 > 字体和颜色,在 显示项 列表框中,选择 查找匹配高亮)。
您可以通过点击查找/替换框上的 查找下一个 图标(或按 F3)依次查看查找到的字符串。
当点击 查找全部 图标时,查找到的所有结果及定位信息将在底部的独立窗口中显示。双击列表中的某个搜索结果可以直接在代码编辑器中打开所在的文件并且文件中的匹配项被突出显示。
在查找/替换框上,您可以点击 切换替换模式 图标切换到替换功能。点击 替换下一个 按钮逐一替换。如果要替换所有匹配的字符串,请点击 全部替换 图标。您还可以选择搜索和替换范围,包括当前文档、选中内容、所有已打开文档、当前项目和整个解决方案。
您还可以进一步设置,例如 匹配大小写、全字匹配、和 使用正则表达式,这些选项可以帮您更准确地查找和替换。如果您想了解如何使用正则表达式,请参阅附录 C:正则表达式示例。
在文件中查找和替换
在文件中查找/替换 的工作方式与 查找和替换 非常相似。要访问 在文件中查找/替换 对话框,请按 Ctrl + Shift + F 或 Ctrl + Shift + H,或选择菜单 编辑 > 查找和替换 > 在文件中查找 或 在文件中替换。
编写和重构代码
快速操作
快速操作可以帮您轻松生成代码,例如类、属性等,或者引入本地变量。快速操作还可以帮您优化代码,例如删除没有用到的变量等。当您将光标放在可操作的代码行上,出现灯泡图标时,表示可以执行快速操作。或者右键点击代码行然后选择 快速操作和重构。
使用灯泡图标执行快速操作
在以下情况下,会出现灯泡图标。灯泡图标表示您有可执行的操作来改进或修复您的代码。
将鼠标悬停在错误上,会出现修复的灯泡图标。
点击 显示可能的修补程序 链接或点击灯泡图标,将看到所有可能的快速操作建议。
右键点击错误的代码,然后选择 快速操作和重构。
将直接显示快速操作建议。
常见快速操作
常见的快速操作包括以下:
- 生成方法
- 生成字段/属性/本地
- 为 IComparable 生成比较运算符
- 生成解构函数
- 为结构生成 IEquatable 运算符
- 添加调试器显示属性
- 添加显式强制转换
- 将参数添加到方法
- 生成参数
- 生成替代
- 生成 Equals 和 GetHashCode 方法替代
- 生成 using
- 实现抽象类
- 实现接口
- 引入局部变量
删除未使用的 Using 并排序
右键点击代码然后选择 删除未使用的 Using 并排序 可以在当前文件中删除所有未使用的 using 指令并且将现有的 using 指令按字母顺序排序。
重构代码
重构代码指的是在不改变代码行为的基础上修改代码使得代码更易维护、理解和扩展。
重命名
允许您重命名代码符号的标识符,例如命名空间、局部变量、类型、方法、属性等。您可以安全地重命名而不必找到所有实例并复制/粘贴新名称。
要使用此功能,请将插入点放在标识符上,然后右键点击并选择 重命名。在弹出的对话框中输入新的名字,您还可以选择是否更新注释和字符串中的名字。点击 应用 链接或直接按回车。新名字将会自动同步到所有相关代码和引用。
提取接口
提取接口指的是您可以将接口、结构或类的现有成员提取成为一个接口。如果类、结构或接口中的成员会被其他类、结构或接口继承,则建议使用此功能。
想要使用此功能:
将光标放在类名中,右键点击并选择 快速操作和重构 > 提取接口...。
在弹出的 提取接口 对话框中输入必要的信息。
点击 确定。接口文件将自动生成。
常见重构代码
常见的重构代码包括以下:
- 将匿名类型转换为类
- 将匿名类型转换为元组
- 在自动属性和完整属性之间转换
- 在 for 循环和 foreach 语句之间进行转换
- 在 Get 方法和属性之间进行转换
- 在常规字符串和逐字字符串文本之间转换
- 将本地函数转换为方法
- 将 foreach 循环转换为 LINQ
- 将 if 语句转换为 switch 语句或 switch 表达式
- 将 LINQ 查询转换为 foreach 语句
- 将 typeof 转换为 nameof
- 将 Switch 语句转换为 Switch 表达式
- DateTime 和 TimeSpan 完成
- 封装字段
- 提取接口
- 内联方法
- 内联临时变量
- CodeAssist 完成未导入类型和扩展方法
- 反转条件表达式和逻辑运算
- 反转 if 语句
- 将类变为抽象
- 将成员设为静态成员
- 将声明移至引用附近
- 将类型移到匹配的文件
- 将类型移到命名空间
- 拉取成员
- 通过 CodeAssist 完成正则表达式
- 删除无法访问的代码
- 重命名
- 简化条件表达式
- 简化 LINQ 表达式
- 简化字符串内插
- 对 using 排序
- Split 或 merge if 语句
- 静态本地函数重构选项
- 同步类型和文件名
- 使用显式类型
- 使用 lambda 表达式或程序块主体
- 使用 new()
- 使用模式匹配
- 未使用的值分配、变量和参数
- 自动换行、缩进和对齐重构
在代码中设置书签
您可以使用书签来标记编辑器中的代码行,这样您可以快速地定位到某代码行,或者在不同的代码行之间进行跳转。您可以通过书签工具栏来插入/删除书签或者在多个书签中跳转。
要添加书签,请将光标放在要添加书签的代码行上,从工具栏中选择 切换书签 图标。书签被插入。左边距栏中将显示一个书签图标。如果这时您再次选择 切换书签 图标,书签将被删除。
当您插入了多个书签以后,您可以通过工具栏的 上一个书签 和 下一个书签 图标在书签之中快速跳转。当不再需要这些书签时,您可以通过工具栏的 清除所有书签 图标来删除所有书签。
预览 Web 应用
对于 Web 应用 类型的项目,您可以在 HTML 文件编辑器中右键点击然后选择 Web 预览窗口 来在 Web 浏览器中预览 HTML 文件。
拆分编辑器窗口
注意:暂不提供 拆分编辑器窗口 功能。
代码编辑窗口允许上下拆分,实现分屏显示。当一个文件的代码行比较多时,上下滚动代码行来修改或对比代码比较费时费神。利用窗口上下拆分功能,可以在两个窗口中同时编辑一个文件,大大提高编程效率。
要上下拆分窗口,请将鼠标移动到代码导航栏的最右边的拆分图标()上,然后点击并向下拖动鼠标。这时窗口被一分为二。
要想合并窗口,请将鼠标移动到两个窗口边界衔接的地方,然后点击并向下或向上拖动鼠标,直到两个窗口重叠。
在代码中移动
向后和向前导航
您可以通过按 Ctrl + “-” 将光标移动到之前的位置,或者通过按 Ctrl + Shift + “-” 从之前的位置返回到最近的位置。
向前/向后移动的最大次数为20。
使用导航栏
导航栏允许您在代码库中进行导航。
您可以使用导航栏上的下拉框进行导航:
- 左侧下拉菜单允许您导航到当前解决方案中引用了当前项目的其他项目。比如一个共享项目有一个类 A,另一个控制台应用 B 和类库项目 C 都引用了这个共享项目,此时导航到类 A 时可以选择项目 B 和项目 C。
- 中间的下拉菜单允许您导航到当前文件中的类或类型。
- 右侧下拉菜单允许您直接导航到方法或类的其他成员。
查找所有引用
查找所有引用允许您查看代码库中引用元素的所有位置。要查找元素的所有引用,请选择该元素,然后按 Shift + F12 或从右键菜单中选择 查找所有引用。
此时,会出现一个 元素名引用 的工具窗口(元素 是所选元素的名称),列举了所有的引用。您可以双击列表中的引用打开对应的文件。
工具窗口的工具栏提供了以下功能:
- 选择查找范围:整个解决方案、当前项目、当前文档、已更改的文档、打开的文档。
- 如果查找到的引用太多,您还可以将引用按不同的分组来展示。
跳转到代码
跳转到定义:
将光标放在某个元素上。
右键点击该元素,然后选择 跳转到定义。光标将会自动跳转到相应的代码行。
跳转到实现:
将光标放在某个基类或类型上。
从右键菜单中选择 跳转到实现。光标将会自动跳转到相应的代码行。
跳转到基类:
将光标放在某个元素上。
从右键菜单中选择 跳转到基类。代码编辑器底部将显示对应的基类窗口,您可以选择双击打开代码文件。
引用高亮显示
当您在代码编辑器中点击一个代码元素时,该元素的所有实例将高亮显示。引用高亮颜色可以修改(请选择菜单 工具 > 选项,在 选项 窗口中,选择 文本编辑器 > 字体和颜色,在 显示项 列表框中,选择 分隔符匹配)。
改进您的代码
在 SnapDevelop 中编写完代码后,您需要确定您的代码是否能够正常工作。SnapDevelop 提供了一套集成的项目编译、调试和测试工具,可用于检测代码中的问题。
与大多数其他 IDE 一样,SnapDevelop 分两个不同的阶段测试您的代码:
- 编译代码 -- 捕获并修复项目和编译器错误。
- 运行代码 -- 检测运行时错误。
编译您的代码
SnapDevelop 支持两种基本类型的生成配置:调试 和 发布,并使用 调试 作为默认生成配置。
要生成整个解决方案,只需选择菜单 编译 > 编译解决方案(或按 Ctrl + Shift + B)。
要编译解决方案中的某个项目,首先将该项目设置为启动项目,然后选择 编译 > 编译项目 (项目 是指定启动项目的名称)。
您可以 IDE 底部的 输出 窗口中查看编译过程,在 错误列表 窗口中查看错误和警告。如果发生任何错误或警告数量超过指定级别,您的生成将失败。在这种情况下,您需要解决错误,然后重新生成您的解决方案/项目。
解决错误
在编写代码时,您可以通过代码编辑器的左下角查看错误和警告的数量,以及通过导航按钮来查看引起这些错误和警告的代码。
在编译解决方案或项目时,如果遇到错误或警告,请到 IDE 底部的 错误列表 窗口查看。双击 错误列表 窗口中的错误以跳转到相应的代码中。
您会注意到错误代码会标有红色波浪下划线,将鼠标悬停在其上可查看错误详细信息,并可根据详细信息尝试纠正错误。
使用快速操作修复或重构代码
您可以使用 快速操作 来修复错误或重构代码。有关如何使用 快速操作 的详细信息,请参阅 编写和重构代码。
调试
有关如何在 SnapDevelop 中调试代码的详细信息,请参阅 调试代码。
单元测试
有关如何在 SnapDevelop 中对代码运行单元测试的详细信息,请参阅 单元测试。
使用AI编程助手
SnapDevelop内嵌AI编程助手,AI编程助手将会通过API密钥和配置的AI驱动来处理您的请求,并提供相应的编程协助。以下是设置和使用AI编程助手的步骤。
准备工作
由于AI编程助手依赖于OpenAI驱动,您需要在OpenAI平台注册并登录,以取得API密钥。
注册和登录
访问 https://www.openai.com,在OpenAI平台上注册并登录。如果您已经是注册用户,请直接登录。
获取 API 密钥
为了使用AI编程助手,您需要获取一个API密钥。请按照以下步骤获取API密钥:
· 登录到您的账户
· 转至设置或类似的页面
· 在API访问或密钥管理部分创建一个新的API密钥
· 复制生成的API密钥并保存在安全的地方
配置AI驱动
以下是配置AI驱动的步骤:
访问SnapDevelop菜单项工具 > AI 编程助手;
进入设置页面;
输入您在OpenAI取得的密钥至API密钥字段。
选择您希望使用的AI模型:gpt-4,或者gpt-3.5。
点击应用按钮,完成设置。
配置和应用提示设计
AI提示设计是一项重要的技能,通过提示设计,您可以为会话提供上下文,从而快速取得满意的答复。关于提示设计技巧,请参考OpenAI或者ChatGPT的相关文档介绍。
以下是如何在AI编程助手配置提示设计的步骤:
在AI 编程助手,进入提示设计页面;
可以看到AI编程助手中已内置了Default提示,这些默认提示中提供了标准C#和Vue程序开发的上下文。您可以根据您的经验和开发需求对其持续完善。
编辑Default提示,或者点击添加按钮,添加新提示。提示编辑窗口包含如下基本内容。
名称 - 提供提示的名称。
介绍 - 提供提示的介绍。
例子 - 输入提示的案例和预期的回复。在您与AI编程助手进行会话时,如果选择当前提示,提示中的示例会作为AI编程助手的上下文运用。
以下是如何在AI编程助手应用提示设计的步骤:
在AI 编程助手,进入会话页面;
点击新建会话按钮中的下拉键,选择选择提示并新建会话;
在弹出的选择提示窗口中,选择您预先设定的提示,然后点击确定按钮;
返回至会话页面,您可以在预设的提示基础上,与AI编程助手展开会话。
与AI编程助手进行会话
现在,您已经完成设置,可以开始使用AI编程助手。以下是与AI编程助手进行会话的步骤:
在AI 编程助手,进入会话页面;
在输入框中输入您的编程问题或请求;
点击回车键提交输入的问题或者请求。您也可以点击输入框旁边的提交按钮();
根据实际情况调整您的问题或请求,直至取得满意的答复。
通过右键菜单使用AI编程助手
代码编辑器的右键菜单中提供了访问AI编程助手的快捷方式。您可以选中某段代码,或者将光标放置在合适位置后,点击右键菜单,即可看到AI编程助手的选项。
提示编码
建议您将光标放置在合适位置后再右键选择 AI编程助手>提示编码... 功能。您可以在弹出的提示框中输入特定的编码要求,AI编程助手结合根据上下文为您提供对应的代码建议。
例如,您在提示框中输入如下编码要求:
AI编程助手将插入如下代码片段至光标位置。为确保代码的正确性,请务必检查并进行必要的调整。
解释代码
AI编程助手可根据要求解释该段代码的功能,例如,解释选中代码中每个函数的用途、每个参数的意义。请了解,AI编程助手提供的解释仅供参考,请根据实际项目情况和个人经验进行判断和调整。
您可以选中某段代码,右键选择AI编程助手>解释代码...,AI编程助手便在会话框中提供相应的解释。
添加代码注释
AI编程助手可以根据代码自动生成注释,包括函数说明、参数描述、返回值描述等,帮助您更好地维护代码。您可以选中某段代码,右键选择AI编程助手>添加代码注释..., 如下图所示:
AI编程助手便在会话框中提供添加了注释的代码片段。如果添加的注释满足要求,您可以点击片段上方的接受按钮,将添加了注释的代码替换原来的代码。
诊断和建议
AI编程助手可以检测代码中的错误,包括语法错误、逻辑错误、潜在的运行时错误等,并提供修复建议。您可以选中某段代码,右键选择AI编程助手>诊断和建议...,如下图所示:
AI编程助手将提供如下的诊断建议供您参考:
管理历史记录
您可以在AI 编程助手>历史记录页面,管理您与AI编程助手之间的会话。所有的会话记录右侧都提供删除()按钮,通过点击改按钮,您可以删除对应的会话记录。