【发布时间】:2017-10-23 22:29:21
【问题描述】:
我习惯于在 CLI 中通过按 Ctrl+C 两次来终止进程,但这在 vscode 的集成终端中不起作用。它提示确认。有没有办法以同样的方式使用它?甚至更好,只需 1 次按键。
【问题讨论】:
标签: visual-studio-code command-line-interface
我习惯于在 CLI 中通过按 Ctrl+C 两次来终止进程,但这在 vscode 的集成终端中不起作用。它提示确认。有没有办法以同样的方式使用它?甚至更好,只需 1 次按键。
【问题讨论】:
标签: visual-studio-code command-line-interface
看起来提示会在 vscode v1.64 中自动回复。见Auto-replies in Release notes:
自动回复
终端现在能够在特定的情况下自动回复 字符序列被接收。这是一个很好的例子 有用的,也是唯一的默认情况,是 Windows 批处理 按下 ctrl+c 后的脚本消息
Terminate batch job (Y/N)?运行批处理脚本。这通常只会导致问题 为用户。终端现在将自动回复Y和 输入 (\r) 让 Windows 中的 ctrl+c 感觉好多了。
该功能是通用的,因此您可以设置自定义回复 另一件事,在发送文本时要小心 自动进入进程。例如,您可以使用它来 提示时自动更新 Oh My Zsh:
"terminal.integrated.autoReplies": {
"[Oh My Zsh] Would you like to check for updates? [Y/n]": "Y\r"
}
如果您使用 Clink 并启用它们的类似功能,您可以禁用它 在 Clink 或 VS Code 中,通过将回复设置为 null 来避免两者 相互冲突的功能:
"terminal.integrated.autoReplies": {
"Terminate batch job (Y/N)": null
}
null 以禁用自动回复。set default to null:看起来他们正在将默认设置更改为禁用。
通过转到文件→首选项→设置,然后搜索字符串terminal.integrated.commandsToSkipShell,然后单击“在settings.json中编辑”,将"workbench.action.terminal.sendSequence"添加到您的settings.json中的terminal.integrated.commandsToSkipShell列表。
如果您的 settings.json 中没有 "terminal.integrated.commandsToSkipShell" 条目,只需添加它:
... ,
"terminal.integrated.commandsToSkipShell": [
"workbench.action.terminal.sendSequence"
]
然后您还需要添加以下键绑定(文件 → 首选项 → 键盘快捷键 → 打开 keybindings.json):
{
"key": "ctrl+c",
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0003Y\u000D"
},
"when": "terminalFocus && !terminalTextSelected"
}
请注意,此解决方案需要您使用 Ctrl-C 两次,并且仅适用于 Visual Studio Code 终端。
这也将改变您在终端中运行的依赖于两个 ctrl-c 指令的任何工具的行为:因为您现在发送大写字母 @987654338 @ 和换行符作为第二条指令,确保你正在运行的任何东西都有可用的替代退出方式。
您可以通过添加此设置来使用multi-command 扩展:
"multiCommand.commands": [
{
"command": "multiCommand.terminateTerminal",
"interval": 1000,
"sequence": [
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "\u0003"
}
},
{
"command": "workbench.action.terminal.sendSequence",
"args": {
"text": "Y\u000D"
}
},
]
}
interval 在两个sendSequence 命令之间提供了一个暂停,两个命令都是必需的:
u\003 是文本结尾(插入符号 = ^C)。
u\000D 是一个返回。
然后在keybindings.json中添加一个键绑定:
{
"key": "ctrl+shift+c",
"command": "extension.multiCommand.execute",
"args": { "command": "multiCommand.terminateTerminal" },
},
某些组合键不起作用(如 Ctrl-C 两次的标准序列),但使用 Ctrl kbd>-Shift-C,无论光标焦点在编辑器、文件资源管理器还是终端上都可以正常工作。
请注意,这不会杀死或关闭终端或影响其历史记录,它只会在那里停止当前作业。
【讨论】:
Y。 (当然,还有其他专门退出节点的方法,但如果您正在运行一个侦听 ctrl-c 的 REPL,请记住,您将通过此修复禁用该功能)