65.9K
CodeProject 正在变化。 阅读更多。
Home

告别剪贴板窗口;你好片段

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2011 年 10 月 20 日

CPOL

7分钟阅读

viewsIcon

12610

提高 .NET 编码效率

什么是代码片段?

片段(Clips 或 Snippets)是那些难以记忆或经常使用但需要少量修改的代码块。开发人员会寻找利用 IDE 的方法,以便只编写一次代码片段,然后在需要时随时随地将其粘贴到编辑器中。在 Classic 中,IDE 的此功能称为 Clip Window。在 .NET IDE 中,此功能称为 Snippets。在 .NET 中创建和使用 Snippets 的过程与 Classic 版本截然不同。本文旨在让 Classic 开发人员熟悉 .NET IDE 的 Snippet 功能,并通过指导他们完成定义和使用 .NET 代码 Snippets 的过程,帮助他们提高 .NET 编码效率。

Classic Clips:回顾

图 1 显示了包含两个代码片段的 Classic Clip Window。 表 1 总结了 Classic Clips 的用法和优点。

Werde-Fig-1.gif

图 1:Classic Clip Window

介绍 VS .NET Snippets

Visual Studio 实现 Snippets 的方式与 Classic 不同。 表 2 总结了它们的功能和特性。

预定义的系统代码片段

PowerBuilder 开箱即用,提供了一组预定义的系统代码片段。系统代码片段位于 PowerBuilder 安装文件夹树中。您可以根据需要查看和修改其源代码,但任何更改将在您升级 PowerBuilder IDE 时丢失。从图 2 可以看出,对过去称为“粘贴特殊 à 语句”的编辑器支持,即熟悉的控制结构,已实现为插入代码片段。图 3:显示了如何从菜单系统中插入系统代码片段。图 4 显示了编辑器中的系统代码片段列表。

Werde-fig-2.gif

图 2:系统代码片段

Werde-fig-3.gif

图 3:插入系统代码片段

Werde-fig-4.gif

图 4:编辑器中的系统代码片段列表

放置代码片段

您可以使用快捷键 Ctrl-K, Ctrl-X 或右键菜单或“编辑”菜单,让系统为您提供一个代码片段列表供选择。请注意图 5,您可以从开发者代码片段或系统代码片段中进行选择(当两者都存在时)。

Werde-fig-5.gif

图 5:代码片段文件夹选择

选择代码片段后,代码将放置在编辑器光标所在位置,代码片段中定义的任何变量都将分配默认值。代码片段中的变量会被高亮显示。将鼠标悬停在变量上会显示其工具提示。这提示您根据需要调整变量值(参见图 5a)。

Werde-fig-5a.gif

图 5a

代码片段管理器

Shell 提供了一个代码片段管理器,您可以使用它在 IDE 中添加和删除代码片段文件。您可以使用快捷键 Ctrl-K, Ctrl-B 或“工具”à“代码片段管理器”菜单打开它。虽然您无法使用此实用程序定义新代码片段,但您可以导入由同事创建的代码片段。请注意,此实用程序没有特别之处。您也可以轻松地使用 Windows 资源管理器将文件复制或移动到代码片段文件夹中。但请小心,您可能会意外删除您的系统代码片段!它们不会移至回收站。图 6 显示了代码片段管理器。

Werde-fig-6.gif

图 6:代码片段管理器

定义代码片段

代码片段的一个真正好处是您可以定义和使用自己的代码片段来自动化重复性任务或在编写代码时辅助记忆。在本节中,我将向您展示如何定义 .NET 代码片段。

代码片段定义为具有 .snippet 文件扩展名的 XML 文件。它们的结构和内容遵循位于 http://msdn.microsoft.com/en-us/library/ms171418(v=VS.80).aspx 的代码片段 XML 架构。

您定义的代码片段存储在 C:\Users\<current user>\Documents\Sybase\PowerBuilder 12.0\PowerBuilder .NET\Code Snippets\PowerScript\My Script Snippets 文件夹中。随着代码片段的增多,您可以将它们组织到子文件夹中。IDE 会按文件夹显示您的代码片段。您可以使用鼠标或 Tab 键轻松导航文件夹以找到所需代码片段。还支持字母顺序自动完成和键盘选择。

虽然您可以通过遵循架构并使用任何文本编辑器输入有效的 XML 来创建和编辑代码片段,但迄今为止最容易开始编写代码片段的方法是下载并使用一个代码片段编辑器。我发现 Bill McCarthy(Microsoft MVP)有一个很棒的开源编辑器,网址是 http://snippeteditor.codeplex.com/。尽管该编辑器以 MS Visual Studio 为中心,并且看不到隔离的 shell,但我发现了一些变通方法使其能够与 PowerBuilder 一起使用。首先,为了允许作为我的 Visual Studio 体验的一部分访问该编辑器,我将其添加到了我的工具菜单中,作为外部工具。现在我无需离开 PB 即可访问它。图 7 显示了我添加外部工具后的工具菜单。

Werde-fig-7.gif

图 7:菜单上的代码片段编辑器

接下来,代码片段编辑器以 MS 为中心,并与注册表中的 MS VS 键相关联。它会自动加载 C# 和 VB 代码片段,并且看不到隔离的 shell 键;我不得不将 PowerBuilder 的“我的代码片段”文件夹添加到文件夹视图中。该工具提供了一个“添加路径”上下文菜单项,支持我的操作。(不幸的是,它不记得添加的路径,所以您每次使用该工具时都必须执行此操作。)图 8 显示了添加文件夹后的我的文件夹视图。

Werde-fig-8.gif

图 8:代码片段编辑器中的 PB 用户代码片段

最后,编辑器仅支持 Microsoft 语言的语言属性。每当您创建新代码片段时,都需要使用 WordPad 编辑生成的代码片段文件,并将 Code 元素的语言属性更改为 PowerScript <Code Language="PowerScript"。如果您跳过此步骤,PowerBuilder 将无法识别代码片段,并且您将在 Painter 的代码片段选择列表中看不到它。幸运的是,在编辑器中对代码片段正文进行后续编辑不会撤销语言指示器的更改,所以这只需要一次性修复。(我给工具作者发了电子邮件,要求他添加 PowerScript 支持。该工具是开源的;如果您是 C# 专家,可以考虑修改代码并提交更改。)

代码片段的组成

图 9 显示了代码片段编辑器中的编辑字段及其对代码片段选择列表和生成的粘贴代码的影响。 表 3 简要解释了每个字段。

Werde-fig-9.gif

图 9:代码片段编辑器字段的注解图

结论和局限性

产品工程师在为带有或不带参数的成员主体字面量和对象类型代码片段提供支持方面做得相当不错。一旦您花一些时间配置自己的代码片段并习惯在编辑器中使用它们,您就会发现代码片段功能是提高生产力的宝贵工具。

当前实现存在一些您应该注意的局限性。首先,没有将 Classic Clips 迁移到 .NET IDE 的路径。您必须将所有 Classic Clips 重新创建为 Snippets。从 Classic 复制粘贴到 Snippet Editor 应该可以完成任务。(我在我的待办事项列表中添加了一项操作,用于构建一个转换实用程序。但我不确定何时能完成。)

其次,Sybase 工程师在不实现 Snippet 规范中存在的高级功能的情况下,提供了与 Classic 中相同的功能。例如,规范提供了允许您指定代码对象所需的引用和导入(usings)的元素 - 这些在 PB 中不起作用。如果您的代码片段代码包含命名空间或程序集中的代码对象,您将必须手动添加这些引用和 usings。

该规范支持三种范围的代码片段:(1)类声明,定义整个类的代码片段;(2)成员声明,定义事件处理程序或函数例程的代码片段;(3)成员主体,插入到现有成员中的代码片段。在这三种中,仅支持成员主体代码片段。这大致相当于 Classic Clips。

我希望看到对导入和引用的工具支持;有了它,调用程序集和 Web 服务中的方法将更容易;我将不太可能忘记或使用错误的引用。我还希望看到对类和成员代码片段定义的と支持。有了它,通过将常见的 CCUO 以及所有对象类型的函数和事件实现为模板生成活动,将提高我的生产力。

祝您编码愉快!

列表 1

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>dwUpdate</Title>
<Author>eLearnIT LLC</Author>
<Description>Basic DW Update Block</Description>
<HelpUrl></HelpUrl>
<SnippetTypes />
<Keywords />
<Shortcut>updt</Shortcut>
</Header>
<Snippet>
<References />
<Imports />
<Declarations>
<Literal Editable="true">
<ID>Transaction</ID>
<Type>Transaction</Type>
<ToolTip>Transaction Object Reference Name</ToolTip>
<Default>SQLCA</Default>
<Function></Function>
</Literal>
</Declarations>
<Code Language="PowerScript" Kind="method body" Delimiter="$">
<![CDATA[if dw_1.Update( ) > 0 then
commit using $Transaction$;
else
rollback using $Transaction$;
end if

]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
再见 Clip Window;你好 Snippets - CodeProject - 代码之家
© . All rights reserved.