【问题标题】:Write C# snippets that end by hitting TAB编写以按 TAB 结束的 C# 片段
【发布时间】:2009-07-08 07:42:42
【问题描述】:

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

这不是什么大问题,但很烦人。我尝试将 struct sn-p 的整个 XML 复制到我自己的中,只替换快捷方式名称。即便如此,我还是必须按 Enter 才能完成插入。

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

这是我要写的 sn-p:

<?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 行为。

【问题讨论】:

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


【解决方案1】:

我只能让 struct sn-p 在按 enter/escape 而不是 tab 时提交。我认为您想要实现的目标是不可能的(或对此不明智)。使用 sn-ps 完成的约定是按回车键或转义 this is the documented behaviour

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

【讨论】:

  • 我想你是对的,但是如果我有多个字段,我想通过它们来制表符,并且保持制表符来完成sn-p非常方便。特别是由于内置的​​ sn-ps 也支持这一点,这对我来说已经成为一种自然行为。
  • sn-p 怎么知道在标签上完成?我使用的所有选项都允许您在字段之间切换,当您到达最后一个字段并再次按 Tab 时,它只会返回到第一个字段。我只见过 enter 或 escape 终止 sn-p。
【解决方案2】:

我现在想通了。

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

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

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

【讨论】:

  • 这将有助于那些迟到的用户在您的问题或 Visual Studio 内置 sn-ps 不以制表符结尾的地方澄清。只有 ReSharper sn-ps 通过选项卡结束。因此,您的问题没有答案,除非您包含或回答者猜到您还安装了 ReSharper。
  • 谢谢,我对问题进行了澄清。
猜你喜欢
  • 2011-07-17
  • 2013-06-17
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 2015-06-20
相关资源
最近更新 更多