智能感知

IntelliSense 是一个通用术语,用于描述各种代码编辑功能,包括:代码补全、参数信息、快速信息和成员列表。IntelliSense 功能有时也被称为“代码补全”、“内容辅助”和“代码提示”。

IntelliSense 演示

适用于您编程语言的IntelliSense

Visual Studio Code 的 IntelliSense 功能为 JavaScript、TypeScript、JSON、HTML、CSS、SCSS 和 Less 提供了开箱即用的支持。VS Code 支持基于单词的自动补全功能,适用于任何编程语言,但也可以通过安装语言扩展来配置更丰富的 IntelliSense 功能。

以下是Marketplace中最受欢迎的语言扩展。选择下面的扩展磁贴以阅读描述和评论,以决定哪个扩展最适合您。

IntelliSense 功能

VS Code 的 IntelliSense 功能由语言服务提供支持。语言服务基于语言语义和源代码分析提供智能代码补全。如果语言服务知道可能的补全选项,IntelliSense 建议会在您输入时弹出。如果您继续输入字符,成员列表(变量、方法等)将被过滤,仅包含包含您输入字符的成员。按下 TabEnter 将插入选定的成员。

您可以在任何编辑器窗口中通过输入 ⌃Space (Windows, Linux Ctrl+Space) 或输入触发字符(例如在 JavaScript 中的点字符 (.))来触发 IntelliSense。

包json中的智能感知

提示: 建议小部件支持驼峰式过滤,这意味着您可以键入方法名称中的大写字母以限制建议。例如,"cra" 将快速显示 "createApplication"。

如果您愿意,可以在输入时关闭IntelliSense。请参阅下面的自定义IntelliSense,了解如何禁用或自定义VS Code的IntelliSense功能。

正如语言服务所提供的那样,您可以通过按下⌃Space (Windows, Linux Ctrl+Space)或点击信息图标来查看每个方法的快速信息。方法的附带文档现在将扩展到一侧。扩展的文档将保持打开状态,并在您浏览列表时更新。您可以通过再次按下⌃Space (Windows, Linux Ctrl+Space)或点击关闭图标来关闭它。

快速信息

选择方法后,您将获得参数信息

参数信息

在适用的情况下,语言服务会在快速信息和方法签名中显示底层类型。在上图中,你可以看到几个any类型。因为JavaScript是动态的,不需要或强制类型,any表示变量可以是任何类型。

完成类型

下面的JavaScript代码展示了IntelliSense的自动补全功能。IntelliSense提供了推断建议和项目的全局标识符。推断的符号首先显示,然后是全局标识符(由Word图标显示)。

智能感知图标

VS Code IntelliSense 提供不同类型的补全功能,包括语言服务器建议、代码片段和基于简单单词的文本补全。

Icon Name Symbol type
method icon Methods and Functions method, function, constructor
variable icon Variables variable
field icon Fields field
type parameter Type parameters typeParameter
constant Constants constant
class Classes class
interface Interfaces interface
structure Structures struct
event Events event
operator Operators operator
module Modules module
property Properties and Attributes property
enumeration icon Values and Enumerations value, enum
reference References reference
keyword Keywords keyword
file Files file
folder Folders folder
color Colors color
unit Unit unit
a square with ellipses forming the bottom show snippet prefix Snippet prefixes snippet
a square with letters abc word completion Words text

自定义 IntelliSense

您可以在设置和键绑定中自定义您的IntelliSense体验。

设置

下面显示的设置是默认设置。您可以在settings.json文件中更改这些设置,如用户和工作区设置中所述。

{
    // Controls if quick suggestions should show up while typing
    "editor.quickSuggestions": {
        "other": true,
        "comments": false,
        "strings": false
    },

     // Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character.
    "editor.acceptSuggestionOnCommitCharacter": true,

    // Controls if suggestions should be accepted on 'Enter' - in addition to 'Tab'. Helps to avoid ambiguity between inserting new lines or accepting suggestions. The value 'smart' means only accept a suggestion with Enter when it makes a textual change
    "editor.acceptSuggestionOnEnter": "on",

    // Controls the delay in ms after which quick suggestions will show up.
    "editor.quickSuggestionsDelay": 10,

    // Controls if suggestions should automatically show up when typing trigger characters
    "editor.suggestOnTriggerCharacters": true,

    // Controls if pressing tab inserts the best suggestion and if tab cycles through other suggestions
    "editor.tabCompletion": "off",

    // Controls whether sorting favours words that appear close to the cursor
    "editor.suggest.localityBonus": true,

    // Controls how suggestions are pre-selected when showing the suggest list
    "editor.suggestSelection": "first",

    // Enable word based suggestions
    "editor.wordBasedSuggestions": "matchingDocuments",

    // Enable parameter hints
    "editor.parameterHints.enabled": true,
}

Tab 补全

编辑器支持“标签补全”,当按下Tab时,会插入最佳匹配的补全。无论建议小部件是否显示,这都有效。此外,在插入建议后按下Tab将插入下一个最佳建议。

Tab Completion

默认情况下,选项卡补全功能是禁用的。使用 editor.tabCompletion 设置来启用它。存在以下值:

  • off - (默认)选项卡补全功能被禁用。
  • on - 所有建议的标签补全功能已启用,重复调用将插入下一个最佳建议。
  • onlySnippets - Tab 补全仅插入与当前行前缀匹配的静态代码片段。

本地性奖励

建议的排序取决于扩展信息以及它们与您当前正在输入的单词的匹配程度。此外,您可以使用editor.suggest.localityBonus设置来要求编辑器提升靠近光标位置的建议。

按位置排序

在上面的图片中,你可以看到 countcontextcolocated 是根据它们出现的作用域(循环、函数、文件)进行排序的。

建议选择

默认情况下,VS Code 会预先选择建议列表中的第一个建议。如果您希望有不同的行为,例如总是选择建议列表中最近使用的项目,您可以使用 editor.suggestSelection 设置。

可用的 editor.suggestSelection 值为:

  • first - (默认)始终选择列表中的第一项。
  • recentlyUsed - 除非前缀(输入以选择)选择了不同的项目,否则将选择之前使用的项目。
  • recentlyUsedByPrefix - 根据之前完成这些建议的前缀选择项目。

选择最近使用的项目非常有用,因为您可以快速多次插入相同的完成内容。

"输入以选择"意味着当前的前缀(大致是光标左侧的文本)用于过滤和排序建议。当这种情况发生并且其结果与recentlyUsed的结果不同时,它将优先考虑。

当使用最后一个选项recentlyUsedByPrefix时,VS Code会记住为特定前缀(部分文本)选择的项目。例如,如果您输入了co然后选择了console,下次您输入co时,建议console将被预选。这使您可以快速将各种前缀映射到不同的建议,例如co -> consolecon -> const

建议中的代码片段

默认情况下,VS Code 在一个小部件中显示代码片段和完成建议。您可以使用 editor.snippetSuggestions 设置来控制此行为。要从建议小部件中移除代码片段,请将值设置为 "none"。如果您希望看到代码片段,可以指定相对于建议的顺序;在顶部 ("top")、在底部 ("bottom"),或按字母顺序内联排列 ("inline")。默认值为 "inline"

键绑定

下面显示的键绑定是默认的键绑定。您可以在keybindings.json文件中更改这些设置,如键绑定中所述。

注意: 有许多与智能感知相关的快捷键。打开默认键盘快捷键文件 > 首选项 > 键盘快捷键)并搜索“suggest”。

[
  {
    "key": "ctrl+space",
    "command": "editor.action.triggerSuggest",
    "when": "editorHasCompletionItemProvider && editorTextFocus && !editorReadonly"
  },
  {
    "key": "ctrl+space",
    "command": "toggleSuggestionDetails",
    "when": "editorTextFocus && suggestWidgetVisible"
  },
  {
    "key": "ctrl+alt+space",
    "command": "toggleSuggestionFocus",
    "when": "editorTextFocus && suggestWidgetVisible"
  }
]

使用AI增强补全功能

在VS Code中,您可以通过人工智能(AI)增强您的编码体验,例如代码行或整个函数的建议、快速文档创建以及帮助创建与代码相关的工件,如测试。

GitHub Copilot 是一个由AI驱动的代码补全工具,可以帮助您更快、更智能地编写代码。您可以在VS Code中使用GitHub Copilot扩展来生成代码,或者从它生成的代码中学习。

VS Code 市场中的 GitHub Copilot 扩展

您可以在Copilot 文档中了解更多关于如何开始使用 Copilot 的信息。

故障排除

如果您发现IntelliSense停止工作,可能是语言服务没有运行。尝试重新启动VS Code,这应该可以解决问题。如果您在安装语言扩展后仍然缺少IntelliSense功能,请在语言扩展的存储库中提出问题。

提示: 有关配置和故障排除 JavaScript IntelliSense 的信息,请参阅 JavaScript 文档

特定的语言扩展可能不支持所有VS Code IntelliSense功能。请查看扩展的README以了解支持的功能。如果您认为语言扩展存在问题,通常可以通过VS Code Marketplace找到扩展的问题仓库。导航到扩展的详细信息页面并选择支持链接。

下一步

IntelliSense 只是 VS Code 的强大功能之一。继续阅读以了解更多信息:

  • JavaScript - 充分利用您的JavaScript开发,包括配置IntelliSense。
  • Node.js - 在Node.js教程中查看IntelliSense的实际应用示例。
  • Debugging - 学习如何为您的应用程序设置调试。
  • 创建语言扩展 - 学习如何创建扩展,为新的编程语言添加IntelliSense。
  • GitHub Copilot in VS Code - 了解如何使用GitHub Copilot的AI功能来增强您的编码。

常见问题

为什么我没有得到任何建议?

IntelliSense 无法工作的图像

这可能是由多种原因引起的。首先,尝试重新启动VS Code。如果问题仍然存在,请查阅语言扩展的文档。有关JavaScript特定的故障排除,请参阅JavaScript语言主题

为什么我没有看到方法和变量的建议?

IntelliSense 显示无有用建议的图像

此问题是由于JavaScript中缺少类型声明(typings)文件引起的。大多数常见的JavaScript库都附带声明文件或提供类型声明文件。请确保为您使用的库安装相应的npm或yarn包。了解更多关于IntelliSense的信息,请参阅使用JavaScript文章。对于其他语言,请查阅扩展的文档。