代码段快捷方式无法在所有地方工作

7

我有一个代码片段string.Format(@“”),有一个快捷方式sf,它会插入片段并将光标放置在两个双引号之间。非常方便。当然,我可以通过键入sf并按两次tab来正常使用它:

enter image description here

但是,我刚刚发现快捷方式在某些位置不起作用。例如,如果我正在构建此语句:

if(true) throw new FormatException() // <-- cursor is inside these parens

当我输入sf时,快捷方式没有出现在Intellisense菜单中,如果我按两次Tab键,它也不会生成片段。为什么?
我已经尝试搜索“C#代码片段快捷方式有时无法工作”,“C#代码片段快捷方式不起作用”,“Visual Studio代码片段有时无法工作”等,但我找不到有用的信息。
编辑:以下是片段定义:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <Title>String.Format with @</Title>
      <Author>Rory</Author>
      <Description>
      </Description>
      <HelpUrl>
      </HelpUrl>
      <Shortcut>sf</Shortcut>
    </Header>
    <Snippet>
      <Declarations>
        <Literal Editable="true">
          <ID>anchor</ID>
          <ToolTip>
          </ToolTip>
          <Default>
          </Default>
          <Function>
          </Function>
        </Literal>
      </Declarations>
      <Code Language="csharp" Delimiter="$" Kind="method body"><![CDATA[string.Format(@"$selected$$end$")]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

那不相关 -- 没有任何片段可用(请参见我的回答,上面是G威廉姆斯的评论)。 - rory.ap
1
它实际上可能会,例如,片段的Kind属性可以限定哪些片段处于活动状态。我期望你的片段是方法体类型的。 - jessehouwing
@jessehouwing -- 你说的“片段类型”是正确的。另外两种可用的类型是“类型声明”和“方法声明”,但都不适用。这是否意味着有些地方不能使用代码片段? - rory.ap
@ThomasWeller -- 使用Snippet Designer - rory.ap
这取决于种类。就像我之前说的那样,你可以将其设置为“任何”,这样它就可以在任何地方工作。但是我在2015年和2013年创建了自己的片段,它们都可以正常工作。 - jessehouwing
显示剩余4条评论
2个回答

2
根据文档,Kind属性确定了代码片段可以在哪里使用。您指定了“方法体”,可能应该改为“任何”。

1

我刚刚创建并测试了你的代码片段的自己的版本(在VS2013和VS2015中),它按预期工作:

enter image description here

这是它的外观:



<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <Title>SnippetFile1</Title>
      <Author>me@example.com</Author>
      <Description>
      </Description>
      <HelpUrl>
      </HelpUrl>
      <Shortcut>sf</Shortcut>
    </Header>
    <Snippet>
      <Code Language="csharp" Delimiter="$"><![CDATA[string.Format(@"$end$")]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

要创建和编辑代码片段,必须使用代码片段设计器


谢谢,我现在得赶火车了,但我会仔细比较这个和我的代码片段(见编辑后的问题)。 - rory.ap
1
我甚至尝试了你的代码片段 - 但没有起作用。使用的是VS 2013。顺带一提,我是使用代码片段设计器创建我的代码片段的。 - rory.ap
安装了任何Visual Studio更新吗?我使用的是2013更新5版本。有没有可能会干扰代码片段的插件?比如Resharper、CodeRush或类似的插件? - jessehouwing
我无法确认是否已安装任何更新。它的版本是12.0.21005.1 REL。我运行了Windows Update,但VS没有任何更新(我确实设置为更新所有MS软件,而不仅仅是Windows)。代码编译正常。我可以很容易地通过一个简单的新项目重现这个问题。甚至我无法在像这样的一行中使用代码片段:System.Diagnostics.Debug.Print(sf); - rory.ap
我在安全模式下运行了 VS(没有插件),但片段仍然无法工作。 - rory.ap
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接