【问题标题】:How to delete the prior word with VS Code terminal如何使用 VS Code 终端删除前面的单词
【发布时间】:2019-09-06 15:14:21
【问题描述】:

在我的标准 MacOS 终端中,alt+delete 删除到前面的单词,但在 VS Code 嵌入式终端中它删除到前面的 空格。奇怪的是,alt+left 正确地将光标移动到前一个单词。例如,给定光标前的foo bar.baz,alt+delete 将删除bar.baz,而alt+left 将光标移动到baz 的开头。有没有办法获得正确的删除词功能?

【问题讨论】:

    标签: macos visual-studio-code


    【解决方案1】:

    结合 MarkRxJx 的建议,将 alt+backspace 设置为 deleteWordPartLeft 在 macOS 上为我工作。

    {
        "key": "alt+backspace",
        "command": "workbench.action.terminal.deleteWordPartLeft", 
        "when": "terminalFocus"
    },
    

    【讨论】:

      【解决方案2】:

      你想要的命令叫做deleteWordEndLeft。根据实验,这会在左侧删除所有连续的非空白字符,然后是所有连续的空白字符。

      之前:

        this is some example text
                        ^
                      cursor (to left of 'm')
      

      deleteWordEndLeft之后:

        this is somemple text
                    ^
                  cursor (to left of 'm')
      

      希望这是您想要的行为! (很抱歉一开始就弄错了。)

      要绑定它,请进入键绑定(文件→首选项→键盘快捷键)并使用搜索框搜索deleteWordEndLeft。这将向您显示现有的键绑定(如果有的话;它在 Windows 上默认不绑定)。您可以通过右键单击绑定并选择更改键绑定(如果已绑定)或添加键绑定(如果未绑定)来更改键绑定。

      【讨论】:

      • 这已经绑定到 alt+delete,它执行 delete-to-previous-whitespace 而不是问题中描述的 delete woe 行为。
      • @weberc2 哎呀,很抱歉误读了这个问题。我已经编辑了我的答案。
      • 嗯,显然 VS Code 对终端和主编辑器有不同的快捷方式。我专门指的是终端,我想要的行为是能够只删除最后一个单词,例如,在 URL 中:curl https://stackoverflow.com/questions/57824640/how-to-delete-the-prior-word-with-vs-code-terminal/57830840#57830840 如果光标位于该 URL 的末尾并且我按 @987654327 @,我希望它阅读:curl https://stackoverflow.com/questions/57824640/how-to-delete-the-prior-word-with-vs-code-terminal/57830840#.
      • 有趣的是,编辑器的行为正常,但终端却没有。
      • @weberc2 通过浏览可用命令(Ctrl+Shift+P,“首选项:打开默认键盘快捷键(JSON)”),终端似乎没有deleteWordEndLeft,只有@ 987654330@.
      【解决方案3】:

      我认为您正在寻找的是 deleteWordPartLeft,它对我来说在 MacOS 上绑定到 ^optionBkSpc。

      【讨论】:

        【解决方案4】:

        对于 bash,我认为是 Ctrl+w

        【讨论】:

        • ctrl+w 与我的 Mac 上的 alt+delete 不同。前者删除前面的空白(如 vs 代码上的alt+delete),而后者删除最后一个块。
        【解决方案5】:

        2020 年 7 月更新:对于 cmd.exe,请参阅 https://github.com/microsoft/vscode/pull/98494

        看来 Ctrl+H 很快就能删除left这个词了。


        在我在其他地方看到 Esc+Delete 有效的评论后,使用sendSequence 进行更多调查这对我有用(在 bash 上)删除回最后一个非单词字符。

        {
          "key": "alt+delete",                   // whatever keybinding you want
          "command": "workbench.action.terminal.sendSequence",
          "args": { "text": "\u001b\u007f" },   // delete word left to first non-word character
                                                //  =  escape+delete
          "when": "terminalFocus"
        },
        

        它不会同时删除现在尾随的非单词字符,您必须 Backspace 将其剪掉。


        在 v1.45 中可以设置集成终端的单词分隔符,见https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_45.md#control-double-click-word-selection 使用此设置:

        terminal.integrated.wordSeparators  // only affects double-click selections, not deletions
        

        更新:同样在 v1.45 中,deleteWordLeft 等终端命令已被删除。 https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_45.md#removal-of-several-prompt-related-commands

        以下命令已被删除:

        workbench.action.terminal.deleteWordLeft
        workbench.action.terminal.deleteWordRight
        workbench.action.terminal.deleteToLineStart
        workbench.action.terminal.moveToLineStart
        workbench.action.terminal.moveToLineEnd
        

        这些命令通过发送一个特定的字符序列到 终端,这是基于什么命令的最大努力猜测 键绑定终端使用。这些命令的问题在于 他们是一个黑匣子,你需要逐字逐句地搜索 vscode 代码库来弄清楚它们是如何工作的。它们已被替换 带有workbench.action.terminal.sendSequence 的自定义键绑定 命令,它以通用的方式执行相同的操作。

        这些是高级键盘快捷键,无法在它们的 全部通过键盘快捷键 UI,因为它们包含参数,但 您可以通过运行 Preferences: Open 查看他们的 JSON 定义 默认键盘快捷键 (JSON) 命令:

        这也应该可以帮助您了解如何使用powerful sendSequence command

        要删除终端左侧的单词,您可以使用 Ctrl+Backspace

        但这会导致您不想要的相同行为(删除所有 bar.foo 而不仅仅是 foo),无论终端 wordSeparator 设置如何 - 不幸的是,这只影响双击选择而不是删除。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-25
          • 1970-01-01
          • 2012-07-25
          • 1970-01-01
          • 2023-02-15
          • 1970-01-01
          • 2018-02-23
          相关资源
          最近更新 更多