编写以打击TAB结尾的C#片段

时间:2009-07-08 07:42:42

标签: c# visual-studio visual-studio-2008 code-snippets

我创建的C#代码段只能通过按Enter键结束,而内置的片段如'struct'可以通过自定义字段的Tab键完成。

这不是一个大问题,但它很烦人。我尝试将结构片段的整个XML复制到我自己的,只替换快捷方式名称。即便如此,我还是按Enter键完成插入。

为什么会这样?其他人可以重现这种行为吗?

以下是我要写的代码段:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
  <Title>cmd</Title>
  <Shortcut>cmd</Shortcut>
  <Description>Code snippet for ICommand</Description>
  <Author>Andreas Larsen</Author>
  <SnippetTypes>
    <SnippetType>Expansion</SnippetType>
  </SnippetTypes>
</Header>
<Snippet>
  <Declarations>
    <Literal>
      <ID>name</ID>
      <ToolTip>Command name</ToolTip>
      <Default>My</Default>
    </Literal>
  </Declarations>
  <Code Language="csharp"><![CDATA[public ICommand $name$Command
  {
  get
  {
    if (_$name$Command == null)
        _$name$Command = new DelegateCommand($name$);
    return _$name$Command;
  }
}
$end$]]>
  </Code>
 </Snippet>
</CodeSnippet>
</CodeSnippets>

修改 正如Carl G所指出的,Visual Studio的行为只能通过ENTER或ESC结束。 TAB结束是ReSharper Live Template行为。

2 个答案:

答案 0 :(得分:3)

我只能在按Enter / escape而不是tab时提交struct snippet。我不认为你想要实现的目标是可能的(或者对此事情是明智的)。要完成代码片段的约定是按Enter键或转义this is the documented behaviour

做其他事情肯定会违反惯例吗?当您使用参数化片段(例如 for )时,您可以看到为什么约定有用。 Tab键允许您在对决定感到满意之前多次修改值,然后按Enter键。

答案 1 :(得分:1)

我现在明白了。

我正在使用ReSharper插件,它似乎有一个覆盖Visual Studio的片段的实时模板功能。 ReSharper添加了TAB可用于在本机VS片段及其实时模板上完成片段的功能。

当我将自定义代码段转换为实时模板时,我得到了我想要的行为。 我现在可以通过TAB浏览每个字段并随时更改它们,并通过TABing完成最后一个元素的完成。

对于那些感兴趣的人,实时模板提供了更多功能丰富的代码段功能。例如,您可以在字段上运行简单的宏,例如 在重用属性名称时,后备字段可以具有小写首字母(如果这是您的命名约定)。如果你负担得起,非常推荐插件!