4

我创建的 C# 代码片段只能通过按 Enter 来结束,而内置片段(例如“struct”)可以通过在自定义字段中切换来完成。

这不是一个大问题,但它很烦人。我尝试将结构片段的整个 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 行为。

4

2 回答 2

3

我只能在按 enter/escape 而不是选项卡时提交 struct 片段。我认为您想要实现的目标是不可能的(或对此不明智)。要完成片段的约定是按回车键或转义键,这是记录在案的行为

做任何其他事情肯定会打破常规吗?当您使用参数化片段(例如for )时,您可以看到为什么约定很有用。制表符允许您在对您的决定感到满意并按 Enter 之前多次修改值。

于 2009-07-08T07:49:41.857 回答
1

我现在想通了。

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

当我将自定义片段转换为实时模板时,我得到了我想要的行为。我现在可以在每个字段中使用 TAB 并随时更改它们,然后通过 TAB 结束最后一个元素来完成片段。

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

于 2009-07-09T07:59:29.720 回答