Visual Studio Code - 集成终端中Ctrl+Backspace无法使用

18
Visual Studio Code 的终端(PowerShell)中,我想使用 Ctrl+Backspace 删除最后一个单词,但它只会在行末添加 ^W,有什么解决办法吗?在 PowerShell 中以外的其他地方可以正常工作。
8个回答

11

ctrl+backspace 在 vscode 集成终端中被映射为 ctrl+w (可能是一个错误),现在我们需要将 ctrl+w 绑定到显式删除单词的操作。很奇怪,对吧?

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

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


要使这种行为持久化,您可以在配置文件Microsoft.PowerShell_profile.ps1文件中设置它。如果该文件不存在于您的PowerShell版本文件夹中,请创建该文件。

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

在顶部写下

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

查看更多:强化你的 PowerShell

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

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


我看到异常信息:'Set-PSReadLineOption' 不被识别为内部或外部命令,可执行程序或批处理文件。 - jtcloud
尝试使用Windows命令提示符和PowerShell,但返回相同的错误。 - jtcloud
3
你可以运行 $profile 命令来查看 Microsoft.PowerShell_profile.ps1 文件的位置。 - Zikoat
Power Shell配置文件的位置可能会有所不同,这取决于设置是否应适用于所有用户/主机或仅适用于当前用户。对于当前用户,在$HOME\Documents\PowerShell中创建一个就足够了。有关详细信息,请参见此链接。(PS:在该链接中还提到可以使用VS Code特定的配置文件,但在我的测试中,VS Code无法识别它。) - Steuerman

3

当我按下 Ctrl+Backspace 时,屏幕显示了 ^W

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

Set-PSReadLineOption -EditMode Emacs

现在它可以正常工作了!


此设置将阻止 ctrl + 箭头键 让您跳过单词。 - cyclingLinguist

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版本)

这可能会产生意想不到的后果。可用的模式包括Windows、Emacs和Vi,其中Windows是默认模式。 Emacs和Vi可能会引入一些奇怪的键盘快捷键,这可能会让典型的Windows用户感到不习惯。 - DharmaTurtle
@DharmaTurtle 是的,现在使用ctrl跳转单词的设置已经不能使用了。 - cyclingLinguist

1
将以下内容添加到vs code中的keybindings.json文件中:
 {
    "key": "ctrl+backspace",
    "command": "workbench.action.terminal.sendSequence",
    "when": "terminalFocus",
    "args": { "text": "\u0008" }
  },

1

那个问题在VS Code社区中没有得到解决 - 他们忽视了它。 - jtcloud
我看到它也被忽略了。这很遗憾。在日常使用中非常痛苦。 - jtcloud

1

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

请参见PR 98494

之前(当它不能正常工作时):

https://user-images.githubusercontent.com/39542938/82770461-bca2ce00-9e06-11ea-8f76-1b168cf03e3d.gif

之后(工作):

https://user-images.githubusercontent.com/39542938/82770356-430ae000-9e06-11ea-9229-288667544326.gif


0

请检查您的设置中的按键绑定,确保它仍然设置正确。

当添加新扩展或更新时,我曾经遇到过按键绑定被删除/更改的奇怪情况。您可能只需要重新添加它。

Visual Studio Code的按键绑定

当然,VSCode和PowerShell是两个不同的环境。如果您分割终端窗口(我经常为自己的工作使用案例这样做),您将得到VSChost和标准consolehost,您会发现虽然您在VSCode中,但它们的行为不同。

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


我在键绑定中添加了以下内容,但没有生效:{"key": "ctrl+backspace", "command":"workbench.action.terminal.deleteWordLeft"} - jtcloud

0

补充JerryGoyal的答案:

如果您在查找配置文件夹和/或使其正常工作方面遇到困难。以下是帮助我的方法。

  1. 我创建了文件夹c:\ Users \ YOUR_USER_NAME \ Documents \ WindowsPowerShell \
  2. 将Microsoft.PowerShell_profile.ps1放在那里
  3. Powershell会告诉您有关安全问题。您必须以管理员身份运行powershell来允许此操作。
  4. 然后键入Set-ExecutionPolicy RemoteSigned。
  5. 回答Y(是)。这显然存在风险!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接