【问题标题】:Visual Studio Code - Ctrl+Backspace not working in Integrated TerminalVisual Studio Code - Ctrl+Backspace 在集成终端中不起作用
【发布时间】:2019-03-19 07:01:14
【问题描述】:

Visual Studio Code 的终端(PowerShell)中,我试图点击Ctrl+Backspace 删除最后一个单词,但它只是将^W 添加到行尾,有什么想法可以解决这个问题吗?它可以在 PowerShell 中的 Visual Studio Code 之外正常工作。

【问题讨论】:

    标签: powershell visual-studio-code


    【解决方案1】:

    ctrl+backspace 以某种方式映射到 vscode 集成终端中的ctrl+w(可能是一个错误),现在我们需要设置ctrl+w 绑定以显式删除单词。很奇怪吧?

    Set-PSReadLineKeyHandler -Chord 'Ctrl+w' -Function BackwardKillWord
    

    请注意,这仅适用于当前终端会话。


    要使这种行为持续存在,您可以在配置文件Microsoft.PowerShell_profile.ps1 文件中设置它。如果您的 powershell version 文件夹中不存在该文件,请创建该文件。

    C:\Program Files\PowerShell\6\Microsoft.PowerShell_profile.ps1
    

    写在顶部

    if ($env:TERM_PROGRAM -eq "vscode") {
      Set-PSReadLineKeyHandler -Chord 'Ctrl+w' -Function BackwardKillWord
    }
    

    键绑定参考:
    https://docs.microsoft.com/en-gb/previous-versions/powershell/module/psreadline/Get-PSReadLineKeyHandler?view=powershell-5.0

    https://docs.microsoft.com/en-gb/previous-versions/powershell/module/psreadline/set-psreadlinekeyhandler?view=powershell-5.0

    【讨论】:

    • 我看到异常:'Set-PSReadLineOption' 未被识别为内部或外部命令、可运行程序或批处理文件。
    • 尝试了 windows cmd 和 powershell 但返回相同的错误。
    • 您可以运行$profile 来查看Microsoft.PowerShell_profile.ps1 文件的位置。
    【解决方案2】:

    根据最新评论 https://github.com/microsoft/vscode/issues/68167 我已经修改了 JerryGoyal 的答案,因此我们不必修改绑定:

    将以下内容放在您的 Microsoft.PowerShell_profile.ps1 配置文件的顶部(在终端中输入 $profile 以找到它,如果它不存在,您可能需要创建一个)

    if ($env:TERM_PROGRAM -eq "vscode") {
      Set-PSReadLineOption -EditMode Emacs
    }
    

    这对我有用(vscode 1.43)

    【讨论】:

    【解决方案3】:

    看起来像是正在跟踪的问题:请参阅workbench.action.terminal.deleteWordLeft Doesn't Work, Outputs ^W

    在 git bash 终端中对我来说很好,但在 vscode 1.36 中对我来说不是 powershell。


    vscode v1.45 对这些终端命令进行了一些更改,例如 deleteWordLeft。 Ctrl+Backspace 现在是否更适合您?

    https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_45.md#removal-of-several-prompt-related-commands

    【讨论】:

    • 这个问题在 VScode 社区中没有得到解决 - 他们忽略了它..
    • 我看到它也被忽略了。这很可悲。日常使用非常痛苦。
    【解决方案4】:

    VSCode 1.48(2020 年 7 月)可能会有所帮助。
    Issue 98404 确实允许 ctrl+backspace 删除 cmd.exe 中的整个单词,这可能适用于powershell 会话。

    PR 98494:

    之前(当它工作时):

    之后(工作):

    【讨论】:

      【解决方案5】:

      检查您的设置中的键绑定以确保它仍然设置。

      在添加新扩展或更新时,我遇到了一些奇怪的键绑定被删除/更改的问题。您可能只需要重新添加它。

      Key Bindings for Visual Studio Code

      当然,VSCode 和 PowerShell 是两个不同的环境。如果你拆分你的终端窗口(我一直这样做是为了我自己的工作用例),你最终会得到 VSChost 和标准控制台主机,你会发现虽然你在 VSCode 中,但它们的行为不同。

      如果您还没有这样做,您可能需要自定义 VSCode 配置文件,这是集成控制台将读取的内容,因为 consolehost 将读取您的 PowerShell 控制台配置文件而不是您的 ISE 配置文件。

      【讨论】:

      • 我在键绑定中添加了这个但没有用:{"key": "ctrl+backspace", "command":"workbench.action.terminal.deleteWordLeft"}
      【解决方案6】:

      要添加到 JerryGoyal 答案:

      如果您在查找配置文件文件夹和/或使其正常工作时遇到困难。这对我有帮助。

      1. 我创建了文件夹 c:\Users\YOUR_USER_NAME\Documents\WindowsPowerShell\
      2. 将 Microsoft.PowerShell_profile.ps1 放在那里
      3. Powershell 比告诉您安全问题。您必须通过以管理员身份运行 powershell 来允许这样做。
      4. 比类型 Set-ExecutionPolicy RemoteSigned。
      5. 回答 Y(是)。这显然需要您自担风险!

      【讨论】:

        【解决方案7】:

        当我按下 Ctrl+Backspace 时,它显示 ^W

        只需在 vscode 控制台中运行此命令

        Set-PSReadLineOption -EditMode Emacs

        现在可以使用了!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-02
          • 1970-01-01
          • 2018-03-09
          • 2020-08-20
          • 1970-01-01
          • 1970-01-01
          • 2017-04-07
          • 1970-01-01
          相关资源
          最近更新 更多