基本编辑

Visual Studio Code 首先是一个编辑器,并包含您高效源代码编辑所需的功能。本主题将引导您了解编辑器的基础知识,帮助您开始编写代码。

键盘快捷键

能够在编写代码时将手放在键盘上对于提高效率至关重要。VS Code 具有丰富的默认键盘快捷键集,并允许您自定义它们。

多重选择(多光标)

VS Code 支持多个光标,以便快速进行同步编辑。您可以使用 Alt+Click 添加辅助光标(渲染更细)。每个光标根据其所在上下文独立运行。添加更多光标的一种常见方法是使用 ⌥⌘↓ (Windows Ctrl+Alt+Down, Linux Shift+Alt+Down)⌥⌘↑ (Windows Ctrl+Alt+Up, Linux Shift+Alt+Up),这些命令会在下方或上方插入光标。

注意:您的显卡驱动程序(例如 NVIDIA)可能会覆盖这些默认快捷键。

Multi-cursor

⌘D (Windows, Linux Ctrl+D) 选择光标处的单词或当前选择的下一个匹配项。

Multi-cursor-next-word

提示:您也可以使用 ⇧⌘L (Windows, Linux Ctrl+Shift+L) 添加更多光标,这将在当前选中文本的每个匹配项处添加一个选择。

多光标修饰键

如果您想将应用多个光标的修饰键更改为 macOS 上的 Cmd+Click 和 Windows 和 Linux 上的 Ctrl+Click,您可以在 editor.multiCursorModifier 设置 中进行更改。这使来自其他编辑器(如 Sublime Text 或 Atom)的用户可以继续使用他们熟悉的键盘修饰键。

该设置可以设置为

  • ctrlCmd - 映射到 Windows 上的 Ctrl 和 macOS 上的 Cmd
  • alt - 现有的默认 Alt

还有一个菜单项 选择 > 切换到 Ctrl+Click 以实现多光标选择 > 切换到 Alt+Click 以实现多光标,可以快速切换此设置。

转到定义打开链接 手势也将尊重此设置,并进行调整,使其不会发生冲突。例如,当设置设置为 ctrlCmd 时,可以使用 Ctrl/Cmd+Click 添加多个光标,并可以使用 Alt+Click 打开链接或转到定义。

缩小/扩大选择

快速缩小或扩大当前选择。使用 ⌃⇧⌘← (Windows, Linux Shift+Alt+Left)⌃⇧⌘→ (Windows, Linux Shift+Alt+Right) 触发。

以下是如何使用 ⌃⇧⌘→ (Windows, Linux Shift+Alt+Right) 扩展选择的一个示例

Expand selection

列(框)选择

将光标放在一个角上,然后按住 Shift+Alt 并拖动到相对的角

Column text selection

注意:当使用 Ctrl/Cmd 作为 多光标修饰键 时,这将更改为 Shift+Ctrl/Cmd

macOS 和 Windows 上还有一些用于列选择的默认键绑定,但 Linux 上没有。

命令 命令 ID
⇧↓ (Windows, Linux Shift+Down) 列选择向下 cursorColumnSelectDown
⇧↑ (Windows, Linux Shift+Up) 列选择向上 cursorColumnSelectUp
⇧← (Windows, Linux Shift+Left) 列选择向左 cursorColumnSelectLeft
⇧→ (Windows, Linux Shift+Right) 列选择向右 cursorColumnSelectRight
⇧PageDown (Windows, Linux Shift+PageDown) 列选择 Page Down cursorColumnSelectPageDown
⇧PageUp (Windows, Linux Shift+PageUp) 列选择 Page Up cursorColumnSelectPageUp

您可以 编辑 您的 keybindings.json 以将它们绑定到更熟悉的内容,如果您愿意的话。

列选择模式

用户设置 编辑器:列选择 控制此功能。进入此模式后,状态栏会显示提示信息,鼠标手势和箭头键将默认创建列选择。此全局切换也可以通过 选择 > 列选择模式 菜单项访问。此外,还可以从状态栏禁用列选择模式。

保存 / 自动保存

默认情况下,VS Code 要求执行显式操作才能将更改保存到磁盘,⌘S (Windows, Linux Ctrl+S)

但是,很容易打开 自动保存,它将在配置的延迟后或焦点离开编辑器时保存您的更改。启用此选项后,无需显式保存文件。打开 自动保存 的最简单方法是使用 文件 > 自动保存 切换按钮,该按钮可打开和关闭延迟保存。

要更详细地控制 自动保存,请打开用户或工作区 设置 并找到相关设置

  • files.autoSave: 可以取以下值
    • off - 禁用自动保存。
    • afterDelay - 在配置的延迟后保存文件(默认 1000 毫秒)。
    • onFocusChange - 当焦点移出脏文件的编辑器时保存文件。
    • onWindowChange - 当焦点移出 VS Code 窗口时保存文件。
  • files.autoSaveDelay: 当 files.autoSave 配置为 afterDelay 时,配置延迟(以毫秒为单位)。默认值为 1000 毫秒。

热退出

默认情况下,VS Code 会在您退出时记住对文件的未保存更改。当应用程序通过 **文件** > **退出**(在 macOS 上为 **代码** > **退出**)关闭或最后一个窗口关闭时,将触发热退出。

您可以通过将 files.hotExit 设置为以下值来配置热退出

  • "off": 禁用热退出。
  • "onExit": 当应用程序关闭时,即在 Windows/Linux 上最后一个窗口关闭或 workbench.action.quit 命令触发(来自 **命令面板**、键盘快捷键或菜单)时,将触发热退出。所有没有打开文件夹的窗口将在下次启动时恢复。
  • "onExitAndWindowClose": 当应用程序关闭时,即在 Windows/Linux 上最后一个窗口关闭或 workbench.action.quit 命令触发(来自 **命令面板**、键盘快捷键或菜单)时,以及任何打开文件夹的窗口(无论是否是最后一个窗口)都将触发热退出。所有没有打开文件夹的窗口将在下次启动时恢复。要将文件夹窗口恢复到关闭之前的状态,请将 window.restoreWindows 设置为 all

如果热退出出现问题,所有备份将存储在以下文件夹中(适用于标准安装位置)

  • Windows %APPDATA%\Code\Backups
  • macOS $HOME/Library/Application Support/Code/Backups
  • Linux $HOME/.config/Code/Backups

查找和替换

VS Code 允许您快速查找并替换当前打开的文件中的文本。按 ⌘F(Windows、Linux Ctrl+F 在编辑器中打开“查找”小部件,搜索结果将在编辑器、概述标尺和迷你地图中突出显示。

如果当前打开的文件中有多个匹配结果,您可以按 Enter⇧Enter(Windows、Linux Shift+Enter 在查找输入框获得焦点后导航到下一个或上一个结果。

从选择中提取搜索字符串

打开“查找”小部件时,它会自动将编辑器中的选定文本填充到查找输入框中。如果选择为空,则光标下的单词将插入到输入框中。

Seed Search String From Selection

此功能可以通过将 editor.find.seedSearchStringFromSelection 设置为 "never" 来关闭。

在选择中查找

默认情况下,查找操作是在编辑器中的整个文件中执行的。它也可以在选定的文本上执行。您可以通过单击“查找”小部件上的汉堡包图标来打开此功能。

Find In Selection

如果您希望它成为“查找”小部件的默认行为,您可以将 editor.find.autoFindInSelection 设置为 always,或者设置为 multiline,如果您希望它仅在选择多行内容时在选定的文本上执行。

高级查找和替换选项

除了使用纯文本进行查找和替换外,“查找”小部件还提供三个高级搜索选项

  • 匹配大小写
  • 匹配整个单词
  • 正则表达式

替换输入框支持保留大小写,您可以通过单击“保留大小写”(**AB**)按钮来打开它。

多行支持和“查找”小部件调整大小

您可以通过将文本粘贴到“查找”输入框和“替换”输入框中来搜索多行文本。按 Ctrl+Enter 在输入框中插入新行。

Multiple Line Support

在搜索长文本时,“查找”小部件的默认大小可能太小。您可以拖动左侧的滑块来扩大“查找”小部件,或双击左侧的滑块来最大化或缩小到默认大小。

Resize Find Widget

跨文件搜索

VS Code 允许您快速搜索当前打开文件夹中的所有文件。按 ⇧⌘F(Windows、Linux Ctrl+Shift+F 并输入您的搜索词。搜索结果将被分组到包含搜索词的文件中,并显示每个文件中命中的指示及其位置。展开文件以查看该文件中所有命中的预览。然后单击其中一个命中以在编辑器中查看它。

A simple text search across files

提示:我们也支持在搜索框中使用正则表达式搜索。

您可以通过单击搜索框右侧下面的省略号(**切换搜索详细信息**)(或按 ⇧⌘J(Windows、Linux Ctrl+Shift+J)来配置高级搜索选项。这将显示其他字段来配置搜索。

提示:您可以使用快速搜索在当前打开文件夹中的所有文件中快速查找文本。打开命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P)并输入 **搜索:快速搜索** 命令。

高级搜索选项

Advanced search options

在搜索框下方的两个输入框中,您可以输入要包含或排除的模式。如果您输入 example,它将匹配工作区中名为 example 的每个文件夹和文件。如果您输入 ./example,它将匹配工作区顶层中的 example/ 文件夹。使用 , 分隔多个模式。路径必须使用正斜杠。您也可以使用 glob 模式 语法,例如

  • * 匹配路径段中的零个或多个字符
  • ? 匹配路径段中的一个字符
  • ** 匹配任意数量的路径段,包括没有路径段
  • {} 用于对条件进行分组(例如 {**/*.html,**/*.txt} 匹配所有 HTML 和文本文件)
  • [] 用于声明要匹配的字符范围(example.[0-9] 匹配 example.0example.1 等)
  • [!...] 用于否定要匹配的字符范围(example.[!0-9] 匹配 example.aexample.b,但不匹配 example.0

VS Code 默认情况下会排除一些文件夹,以减少您不感兴趣的搜索结果数量(例如:node_modules)。打开 设置 以在 files.excludesearch.exclude 部分更改这些规则。

请注意,搜索视图中的 glob 模式与 files.excludesearch.exclude 等设置中的 glob 模式的工作方式不同。在设置中,您必须使用 **/example 来匹配工作区子文件夹 folder1/example 中名为 example 的文件夹。在搜索视图中,** 前缀是默认的。这些设置中的 glob 模式始终相对于工作区文件夹的路径进行评估。

另请注意 **“文件要排除”** 框中的 **“使用排除设置和忽略文件”** 切换按钮。该切换按钮决定是否排除由您的 .gitignore 文件忽略或与您的 files.excludesearch.exclude 设置匹配的文件。

提示:在资源管理器中,您可以右键单击文件夹并选择 **在文件夹中查找** 以仅在文件夹内搜索。

搜索和替换

您也可以在文件之间进行搜索和替换。展开搜索小部件以显示“替换”文本框。

search and replace

当您在“替换”文本框中键入文本时,您将看到待更改的差异显示。您可以从“替换”文本框中替换所有文件,替换一个文件中的所有内容或替换单个更改。

search and replace diff view

提示:您可以使用 (Windows、Linux Down(Windows、Linux Up 在搜索词历史记录中快速导航以重复使用以前的搜索词。

正则表达式替换中的大小写转换

VS Code 支持在编辑器或全局搜索和替换时更改正则表达式匹配组的大小写。这是通过修改器 \u\U\l\L 完成的,其中 \u\l 将使单个字符变为大写/小写,\U\L 将使匹配组的其余部分变为大写/小写。

示例

Changing case while doing find and replace

修改器也可以堆叠 - 例如,\u\u\u$1 将使组的前三个字符变为大写,或者 \l\U$1 将使第一个字符变为小写,并将其余部分变为大写。捕获组在替换字符串中由 $n 引用,其中 n 是捕获组的顺序。

搜索编辑器

搜索编辑器允许您在全尺寸编辑器中查看工作区搜索结果,包括语法高亮显示和可选的周围上下文行。

以下是带有两行文本上下文的匹配内容,用于搜索单词“SearchEditor”

Search Editor overview

**打开搜索编辑器** 命令将打开现有的搜索编辑器(如果存在),否则创建一个新的搜索编辑器。**新建搜索编辑器** 命令将始终创建一个新的搜索编辑器。

在搜索编辑器中,可以使用**转到定义**操作导航到结果,例如 F12 在当前编辑器组中打开源代码位置,或 ⌘K F12(Windows、Linux Ctrl+K F12 在侧边编辑器中打开位置。此外,您可以使用 search.searchEditor.singleClickBehavioursearch.searchEditor.doubleClickBehaviour 设置配置单击或双击搜索结果的行为。例如,打开窥视定义窗口或打开源代码位置。

您也可以使用搜索视图顶部的**打开新的搜索编辑器**按钮,并将您现有的搜索结果从搜索视图复制到搜索编辑器中,方法是使用结果树顶部的**在编辑器中打开**链接,或使用**搜索编辑器:在编辑器中打开结果**命令。

Search Editor Button

上面的搜索编辑器是通过选择搜索视图顶部**打开新的搜索编辑器**按钮(第三个按钮)打开的。

搜索编辑器命令和参数

  • search.action.openNewEditor - 在新标签页中打开搜索编辑器。
  • search.action.openInEditor - 将当前搜索结果复制到新的搜索编辑器中。
  • search.action.openNewEditorToSide - 在您当前打开的窗口旁边的新窗口中打开搜索编辑器。

您可以向搜索编辑器命令(search.action.openNewEditorsearch.action.openNewEditorToSide)传递两个参数,以允许键盘绑定配置新的搜索编辑器应如何运行

  • triggerSearch - 当打开搜索编辑器时,是否应自动运行搜索。默认值为 true。
  • focusResults - 是否将焦点置于搜索结果或查询输入中。默认值为 true。

例如,以下键盘绑定在打开搜索编辑器时运行搜索,但将焦点保留在搜索查询控件中。

{
  "key": "ctrl+o",
  "command": "search.action.openNewEditor",
  "args": { "query": "VS Code", "triggerSearch": true, "focusResults": false }
}

搜索编辑器上下文默认值

search.searchEditor.defaultNumberOfContextLines 设置的默认值为 1,这意味着在搜索编辑器中,每个结果行的前面和后面都会显示一行上下文。

重用上次的搜索编辑器配置

search.searchEditor.reusePriorSearchConfiguration 设置(默认值为 false)允许您在创建新的搜索编辑器时重用上一个活动的搜索编辑器的配置。

IntelliSense

我们将始终提供单词补全,但对于像 JavaScript、JSON、HTML、CSS、SCSS、Less、C# 和 TypeScript 这样的丰富语言,我们提供真正的 IntelliSense 体验。如果语言服务知道可能的补全,那么 IntelliSense 建议将在您键入时弹出。您始终可以使用 ⌃Space(Windows、Linux Ctrl+Space 手动触发它。默认情况下,TabEnter 是接受键盘触发器,但您也可以自定义这些键盘绑定

提示:建议过滤支持驼峰式命名法,因此您可以键入方法名称中大写的字母来限制建议。例如,“cra” 将快速显示 “createApplication”。

提示:可以通过 editor.quickSuggestionseditor.suggestOnTriggerCharacters 设置 配置 IntelliSense 建议。

JavaScript 和 TypeScript 开发人员可以利用 npmjs 类型声明(类型定义)文件存储库来为常用的 JavaScript 库(Node.js、React、Angular)获得 IntelliSense。您可以在 JavaScript 语言 主题和 Node.js 教程中找到有关使用类型声明文件的良好解释。

IntelliSense 文档 中了解更多信息。

格式化

VS Code 对源代码格式化有很好的支持。编辑器有两个显式格式化操作

  • 格式化文档 (⇧⌥F(Windows Shift+Alt+F,Linux Ctrl+Shift+I) - 格式化整个活动文件。
  • 格式化选定内容 (⌘K ⌘F(Windows、Linux Ctrl+K Ctrl+F) - 格式化选定的文本。

您可以从命令面板 (⇧⌘P(Windows、Linux Ctrl+Shift+P) 或编辑器上下文菜单中调用这些操作。

VS Code 为 JavaScript、TypeScript、JSON、HTML 和 CSS 提供默认格式化程序。每种语言都有特定的格式化选项(例如,html.format.indentInnerHtml),您可以根据自己的喜好调整这些选项,在用户或工作区 设置 中进行调整。如果安装了另一个扩展为相同语言提供格式化,您也可以禁用默认语言格式化程序。

"html.format.enable": false

除了手动调用代码格式化之外,您还可以根据用户手势(例如键入、保存或粘贴)触发格式化。这些操作默认情况下处于关闭状态,但您可以通过以下 设置 启用这些行为

  • editor.formatOnType - 键入后格式化该行。
  • editor.formatOnSave - 保存时格式化文件。
  • editor.formatOnPaste - 格式化粘贴的内容。

注意:并非所有格式化程序都支持格式化粘贴,因为它们必须支持格式化选定内容或文本范围才能做到这一点。

除了默认格式化程序之外,您还可以在市场中找到扩展来支持其他语言或格式化工具。有一个“格式化程序”类别,这样您就可以轻松地搜索并找到 格式化扩展。在扩展视图搜索框中,键入“formatters”或“category:formatters”以查看 VS Code 中扩展的过滤列表。

折叠

您可以使用行号和行开始之间的边距上的折叠图标来折叠源代码区域。将鼠标移到边距上并单击以折叠和展开区域。在折叠图标上使用 Shift + Click 来折叠或展开区域以及区域内的所有区域。

Folding

您也可以使用以下操作

  • 折叠 (⌥⌘[(Windows、Linux Ctrl+Shift+[) 折叠光标处最内层的未折叠区域。
  • 展开 (⌥⌘](Windows、Linux Ctrl+Shift+]) 展开光标处的折叠区域。
  • 切换折叠 (⌘K ⌘L(Windows、Linux Ctrl+K Ctrl+L) 折叠或展开光标处的区域。
  • 递归折叠 (⌘K ⌘[(Windows、Linux Ctrl+K Ctrl+[) 折叠光标处最内层的未折叠区域以及该区域内的所有区域。
  • 递归展开 (⌘K ⌘](Windows、Linux Ctrl+K Ctrl+]) 展开光标处的区域以及该区域内的所有区域。
  • 折叠所有 (⌘K ⌘0(Windows、Linux Ctrl+K Ctrl+0) 折叠编辑器中的所有区域。
  • 展开所有 (⌘K ⌘J(Windows、Linux Ctrl+K Ctrl+J) 展开编辑器中的所有区域。
  • 折叠级别 X (⌘K ⌘2(Windows、Linux Ctrl+K Ctrl+2,级别 2) 折叠所有级别 X 的区域,除了当前光标位置的区域。
  • 折叠所有块注释 (⌘K ⌘/(Windows、Linux Ctrl+K Ctrl+/) 折叠所有以块注释标记开头的区域。

默认情况下,折叠区域根据行的缩进进行评估。当一行比一个或多个后续行缩进更小时,折叠区域开始,当有一行缩进相同或更小时,折叠区域结束。

折叠区域也可以根据编辑器配置语言的语法标记进行计算。以下语言已经提供了语法感知折叠:Markdown、HTML、CSS、LESS、SCSS 和 JSON。

如果您希望将以上一种(或所有)语言切换回基于缩进的折叠,请使用

  "[html]": {
    "editor.foldingStrategy": "indentation"
  },

区域也可以由每种语言定义的标记定义。以下语言目前已定义标记

语言 开始区域 结束区域
Bat ::#regionREM #region ::#endregionREM #endregion
C# #region #endregion
C/C++ #pragma region #pragma endregion
CSS/Less/SCSS /*#region*/ /*#endregion*/
Coffeescript #region #endregion
F# //#region(#_region) //#endregion(#_endregion)
Java //#region//<editor-fold> //#endregion//</editor-fold>
Markdown <!-- #region --> <!-- #endregion -->
Perl5 #region=pod #endregion=cut
PHP #region #endregion
PowerShell #region #endregion
Python #region# region #endregion# endregion
TypeScript/JavaScript //#region //#endregion
Visual Basic #Region #End Region

要仅折叠和展开由标记定义的区域,请使用

  • 折叠标记区域 (⌘K ⌘8 (Windows、Linux Ctrl+K Ctrl+8)) 折叠所有标记区域。
  • 展开标记区域 (⌘K ⌘9 (Windows、Linux Ctrl+K Ctrl+9)) 展开所有标记区域。

折叠选择

命令 **从选择创建手动折叠范围** (⌘K ⌘, (Windows、Linux Ctrl+K Ctrl+,)) 从当前选定的行创建折叠范围并将其折叠。该范围称为 **手动** 折叠范围,它位于折叠提供程序计算的范围之上。

手动折叠范围可以使用命令 **删除手动折叠范围** (⌘K ⌘. (Windows、Linux Ctrl+K Ctrl+.)) 删除。

手动折叠范围在没有编程语言支持折叠的情况下特别有用。

缩进

VS Code 允许您控制文本缩进以及是否使用空格或制表符。默认情况下,VS Code 插入空格并使用每个 Tab 键 4 个空格。如果您想使用其他默认值,可以修改 editor.insertSpaceseditor.tabSize 设置

    "editor.insertSpaces": true,
    "editor.tabSize": 4,

自动检测

VS Code 会分析您的打开文件并确定文档中使用的缩进。自动检测到的缩进会覆盖您的默认缩进设置。检测到的设置将显示在状态栏的右侧

auto detect indentation

您可以点击状态栏中的缩进显示以调出一个下拉菜单,其中包含缩进命令,允许您更改打开文件的默认设置或在制表符和空格之间转换。

indentation commands

注意:VS Code 自动检测会检查 2、4、6 或 8 个空格的缩进。如果您的文件使用不同数量的空格,则可能无法正确检测到缩进。例如,如果您的约定是使用 3 个空格缩进,您可能需要关闭 editor.detectIndentation 并明确将制表符大小设置为 3。

    "editor.detectIndentation": false,
    "editor.tabSize": 3,

文件编码支持

通过在 **用户设置** 或 **工作区设置** 中使用 files.encoding 设置,全局或按工作区设置文件编码。

files.encoding setting

您可以在状态栏中查看文件编码。

Encoding in status bar

点击状态栏中的编码按钮以使用不同的编码重新打开或保存活动文件。

Reopen or save with a different encoding

然后选择一个编码。

Select an encoding

比较文件

VS Code 支持多种方式比较当前文件或任何两个文件的内容。

当您在编辑器中打开一个活动文件时,您有以下比较选项

  • 与工作区文件比较:在命令面板中,选择 **文件:将活动文件与...进行比较**,然后选择另一个要比较的文件。
  • 与剪贴板比较:在命令面板中,选择 **文件:将活动文件与剪贴板进行比较** (⌘K C (Windows、Linux Ctrl+K C)) 以将当前文件与剪贴板内容进行比较。
  • 与已保存内容比较:在命令面板中,选择 **文件:将活动文件与已保存内容进行比较** (⌘K D (Windows、Linux Ctrl+K D)) 以将当前文件与上次保存的版本进行比较。

要比较任何两个文件

  • 右键单击资源管理器视图中的文件,然后选择 **选择以进行比较**。然后,右键单击第二个文件,然后选择 **与已选择内容进行比较**。
  • 要开始在两个空编辑器窗口之间进行比较,请从命令面板中选择 **文件:比较新的未标题文本文件**。

提示:您可以使用 --diff 选项从命令行启动 VS Code 以比较两个文件。了解有关 VS Code 命令行界面 的更多信息。

下一步

您已经了解了基本的用户界面 - VS Code 还有更多功能。继续阅读以了解

常见问题

是否可以全局搜索和替换?

是的,展开搜索视图文本框以包含替换文本字段。您可以在工作区中的所有文件上执行搜索和替换。请注意,如果您没有在文件夹上打开 VS Code,则搜索将仅在当前打开的文件上运行。

global search and replace

如何打开自动换行?

您可以通过 editor.wordWrap 设置 控制自动换行。默认情况下,editor.wordWrapoff,但如果您将其设置为 on,文本将在编辑器视窗的宽度上换行。

    "editor.wordWrap": "on"

您可以使用 ⌥Z (Windows、Linux Alt+Z) 切换 VS Code 会话的自动换行。

您还可以使用 editor.rulers 设置向编辑器添加垂直列标尺,该设置接受一个包含您想要添加垂直列标尺的列字符位置的数组。

与其他编辑器一样,**剪切** 和 **复制** 等命令适用于整个换行。三击选择整个换行。按两次 Home 将光标移动到行的开头。按两次 End 将光标移动到行的末尾。

如何避免在自动换行行中放置额外的光标?

如果您希望在您的当前选择之上或之下添加光标时忽略换行,您可以将 { "logicalLine": true } 传递到键绑定上的 args,如下所示

{
  "key": "shift+alt+down",
  "command": "editor.action.insertCursorBelow",
  "when": "textInputFocus",
  "args": { "logicalLine": true },
},
{
  "key": "shift+alt+up",
  "command": "editor.action.insertCursorAbove",
  "when": "textInputFocus",
  "args": { "logicalLine": true },
},