在 Visual Studio 中使用自动代码完成时,有没有办法修改 IntelliSense 输入的代码?

Is there a way to modify the code entered by IntelliSense when using auto code completion in Visual Studio?

我想修改当我按tabtab tab时Visual Studio/Intellisense输入的自动填充代码.

我已经尝试在在线论坛和 Microsoft 文档中进行搜索,但没有找到解决方案。

例如,当我输入 "MessageBox.s" 并按 Tab 键时,它会自动完成

MessageBox.Show

我想更改它以自动完成

MessageBox.Show("");

这样我就可以节省时间,因为我不必输入我经常使用的括号、引号和分号。在 Visual Studio 中有什么方法可以做到这一点吗?我正在使用 Visual Studio Community 2017。或者是否有第三方插件可以用来自定义行为?

智能感知在后台编译代码并自动完成属性、方法等。我想您应该看一下代码片段并定义一个适合您需要的片段。

作为起点,请查看 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC#\Snippets33\Visual C#

中定义的片段

我猜你已经这样做了,但要在 visual studio 2010 中编辑自动完成/智能感知设置,你可以转到工具 -> 选项... -> 文本编辑器 -> C# -> 智能感知

我可能无法准确回答您的问题,但我认为我可以解决根本问题。

您要解决的问题是,当您输入的内容非常频繁时,少打字多写。

您建议的可能存在(编辑自动完成),但我一直使用的是实时模板。我正在使用 Rider(不是 visual studio),因此它可能被称为 Snippets,但它正是您要问的。

已经有非常有用的示例,例如,如果您键入 cw 然后 tab 选项卡,它会写一个完整的 Console.WriteLine(); 将光标放在括号中。您甚至可以添加变量和许多非常有用的东西。其他默认的实时模板是foreach + tab + tab,或for,或switch,你懂的。

无论如何,在您的设置 "live templates"(或片段)中搜索,您可以在那里添加任意数量的内容。然后,对于你的情况,你可以只写 mb tab tab 就可以了 ;)

我还建议您查看如何使用 $VAR$、$SELECTION$、$END$ 等自定义这些实时模板,这样您就可以最大限度地提高效率。

另外,新年快乐\o/

简短的回答:是...但不是。

据我了解,在Visual Studio中有两类不同的auto-fill代码:

  • 代码片段。存储在以 .snippet 结尾的文件中的代码块。
  • 类 和他们的方法

代码片段位于 VS 文件中的不同位置(我的位置与 Schneider 的位置完全不同)。这些是 If 语句之类的东西,可以打开和编辑文件。您可以通过转到“工具”>“代码片段管理器”>“CSharp”>“Visual C#”在 VS 中找到 folder/file 位置。对我来说是 C:\Program Files (x86)\Microsoft Visual Studio17\Community\VC#\Snippets33\Visual C#。 如果你双击其中一个文件,你可以在 VS 中打开它并编辑代码,这就是全部 XML。如果您想编辑填写的代码,请查找代码的一部分 "CDATA":

<Code Language="csharp"><![CDATA[foreach ($type$ $identifier$ in $collection$)
{
    $selected$ $end$
}]]>

您可以在 Microsoft 文档中阅读更多语法细节。但是如果你想修改其他类型的 auto-fill 东西 - 类 和他们来自内置库的方法 - 据我所知,没有办法做到这一点;但是,使用 "shortcuts" 创建您自己的自定义片段有一个变通方法。我发现 Microsoft 的 this page 有助于弄清楚如何去做。尽管与文档相比,我必须做一些不同的事情,所以我将在此处使用 C# 中的 MessageBox.Show 示例提供解释。

转到文件>新建>文件

弹出新文件window时,selectXML文件。

删除默认代码行并粘贴以下代码:

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>MessageBox.Show</Title>
      <Shortcut>mess</Shortcut>
    </Header>
    <Snippet>
      <References>
        <Reference>
          <Assembly>System.Windows.Forms.dll</Assembly>
        </Reference>
      </References>
      <Imports>
        <Import>
          <Namespace>System.Windows.Forms</Namespace>
        </Import>
      </Imports>
      <Code Language="CSharp">
        <![CDATA[MessageBox.Show("");]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

快捷方式标签是您将在代码项目中输入的内容,以触发此代码段作为建议出现。 CDATA 之后的内部括号之间的内容将是 auto-fills 的代码。

将文件保存到您的文档文件夹中(这是 VS 稍后查找的默认文件夹)。将文件命名为 MessageBoxShow.snippet

现在进入工具>代码片段管理器

Select 您的语言 (Csharp),然后单击导入

导航到刚才保存的 MessageBox.Snippet 文件并双击它。 “导入代码片段”对话框打开,要求您从右侧窗格中的选项中选择添加代码片段的位置。选择之一应该是我的代码片段。 Select 然后点击完成

单击“确定”关闭代码片段管理器。

您现在应该可以输入 "mess" 并填写您的自定义片段代码。如果没有,您可以尝试关闭并重新打开您的项目或 VS。微软教程说你可以稍后添加快捷方式标签,但我试过了,VS 没有找到它,所以我不得不用快捷方式标签重新创建文件 then 导入它,它成功了!

当然,您基本上可以使用相同的方法为您想要的任何内容创建代码段和快捷方式。您只需更改标题、快捷方式和代码 (CDATA) 标签中的文本,并将其保存在不同的文件名下。

感谢 Peter Schneider 和 Gil Sand 的贡献。虽然您没有为我的问题提供直接的解决方案,但您确实帮助我找到了我要找的东西。