问题描述
VSCode 应该使用关键字(如 [Period]
)作为热键,而不是纯符号(如 .
),对于包含 cmd 或 ctrl 的默认快捷键设置。
原因
这样默认快捷键就可以在所有布局之间通用,无需手动修复这些默认设置。
例如:
- 在英文布局中,“Quick Action”快捷键为 cmd + .,因为
.
是.
- 在俄文布局中,“Quick Action”快捷键为 cmd + ю,但纯符号(
.
)不计算这个:ю
不是.
- 但如果在设置中是 cmd + [Period],而不是 cmd + .,那么它将同时计算为 cmd + . 和 cmd + ю,因为它们都是相同的物理键,这很棒!(感谢 VSCode 有这些关键字)
因此,当您使用非英语布局时,默认的“Quick Fix”操作有时无法正常工作,用户需要更改布局,这会让人感到烦恼。或者,用户需要自己手动更改默认热键设置中的这些 .
为 [Period]
... 这很不幸。
解决方案
TL;DR:更改默认快捷键,使其使用提到的关键字(如 [Period]
),而不是纯符号(如 .
)。
正如我所说,用户可以使用自定义设置来解决每个问题快捷键,就像在这个例子中:
// ✅ Good: English layout is respected in whatever currently chosen language in OS
{
"key": "cmd+[Period]",
"command": "editor.action.quickFix",
"when": "editorHasCodeActionsProvider && editorTextFocus && !editorReadonly"
}
这个 [Period]
关键字使得它在不同的布局中都能正常工作,只要它与其他非英语语言中的其他符号共享相同的物理键。但是默认设置似乎使用了纯符号:
// ❌ Bad: Although this hotkey works in English layout, however in Russian layout the same (physically) key doesn’t output a dot symbol, thus it doesn’t fire the «Quick Fix» action
{
"key": "cmd+.",
"command": "editor.action.quickFix",
"when": "editorHasCodeActionsProvider && editorTextFocus && !editorReadonly"
}
所以问题是:VSCode 默认快捷键在非英语布局下有时无法正常工作。这个修复(关键字)应该应用于所有默认快捷键,以解决这个问题。
其他问题快捷键示例(仅举例):
虽然我不知道所有具体的例子,但我发现了一些除了 shift + cmd + . 之外的问题快捷键:
- cmd + shift + { (俄文布局中的
shift+cmd+х
) - cmd + shift + } (俄文布局中的
shift+cmd+ъ
)
当所有扩展都被禁用时,这个问题是否仍然存在?:是的
版本:1.63.2(通用)
提交:899d46d
日期:2021-12-15T09:37:28.172Z(一个月前)
Electron:13.5.2
Chromium:91.0.4472.164
Node.js:14.16.0
V8:9.1.269.39-electron.0
操作系统:Darwin x64 20.6.0
8条答案
按热度按时间uz75evzq1#
感谢您的建议。我们已经考虑过这个问题,但是虽然在俄语键盘布局上
[Period]
可以这样输入,但这并不适用于所有键盘布局。我立刻想到的一些例子:/
通过Shift+[Digit7]
生成。使用德语键盘布局的用户期望切换行注解是Cmd+Shift+[Digit7]
,而不是Cmd+[Slash]
。AZERTY
)上,用户期望全选是Cmd+[KeyQ]
而不是Cmd+[KeyA]
。Cmd+[Slash]
而不是Cmd+[KeyZ]
:hfsqlsce2#
同时,我可以尝试改进我们的启发式方法来处理像俄罗斯语这样的布局(如果没有产生
.
的键,我们可以添加一个回退,使得[Period]
产生.
,并使用[Period]
作为涉及.
的默认键绑定的物理键,就像我们已经为所有字母A
-Z
所做的那样)。在我看来,解决这个问题有两种方法:
p8h8hvxi3#
哦,我明白了...但是为什么不保留两者呢?即:
并且,如果没有这样的操作,传播到我所谓的“默认英语热键”:
这样你就可以实现两者,并满足两个观众。在其他情况下,大约2%的边缘情况,当与用户设置或其他事物冲突时,VSCode将尊重特定语言的快捷键。听起来不错,不是吗?
因为我的情况中,我没有对cmd + ю执行任何操作,所以发生的事情是:什么都没有(而不是触发“快速修复”操作)。同样适用于cmd + shift + х和cmd + shift + ъ, - 也是什么都没有(而不是导航选项卡)。我希望它们在这种情况下传播到各自的英语快捷键。
P.S.多年来使用VSCode时,我没有遇到这个问题,因为我一直纯粹将其用作代码编辑器,或者编写英文文档,但从未需要在VSCode中使用俄语语言。直到最近,我才开始使用它来编写俄语文章和俄语文档等。
os8fio9y4#
刚刚偶然发现了错误的热键。这次更改的原因是什么?
在Mac上,热键与键盘布局无关。每个应用程序都使用cmd + .(键码190)打开设置,独立于选择的语言。
2izufjch5#
哦,实际上我刚刚重新阅读了我的消息,发现它有两个令人困惑的地方:
cmd + ,
而不是cmd + .
(现在已经修复)所以自从我编辑了原始消息后,你能麻烦再读一遍吗,@daniilshustov 和 @alexdima?
此外,@daniilshustov,- 你似乎误解了快捷键。每个应用程序都用 cmd + 打开设置,而不是用 cmd + 。😀 所以关键代码是 188,而不是 190。但重要的是,当我在操作系统中选择俄语时,VSCode不会打开它。正如我最初所说的:不幸且令人恼火。所以你的陈述,@daniilshustov:
在 Mac 上热键不受键盘布局影响
错误。虽然对于其他应用程序来说是正确的,但对于 VSCode 来说并非如此。这就是这个问题所在。
bis0qfac6#
我不是这个更改背后的逻辑的粉丝,但如果它能正常工作的话,我可以接受。我不能像
ctrl+ı
那样使用快捷键,但我可以使用ctrl+alt+ı
。我的很多快捷键突然之间就不起作用了,原因不明。我不知道为什么,但我知道如何避免这种情况。完全消除将按键与其输出关联在一起的做法。这与不同的布局不同,并导致问题。这从来都不是一个好主意,而且我从未在任何应用程序中看到它能正常工作。这不仅仅是不同的布局。它还可以在操作系统的其他级别上进行修改。我在
LeftShift+RightShift
上设置了Caps Lock
,而 Caps Lock 键的输出是Alt Gr
。顺便说一下,这是我一生中做出的最佳决定。这是通过 KDE 设置的。你能诚实地说你考虑到了这些情况吗?如果我尝试将 Caps Lock 键用作Alt Gr
或Shift_3
或其他快捷键,你能知道吗?谢谢你的建议。我们已经考虑过这个问题,但虽然这可能适用于俄语键盘布局上的
[Period]
,但这并不适用于所有键盘布局。我脑海中立即想到的一些例子:/
通过Shift+[Digit7]
产生。使用德语键盘布局的用户期望切换行注解是Cmd+Shift+[Digit7]
,而不是Cmd+[Slash]
。AZERTY
)上,用户期望选择所有内容是Cmd+[KeyQ]
,而不是Cmd+[KeyA]
。Cmd+[Slash]
,而不是Cmd+[KeyZ]
:德国斜杠的例子也适用于土耳其键盘。我们也有斜杠在
shift+7
上,猜怎么着,我可以给一个快捷键分配ctrl+shift+7
,它不会认为它是ctrl+/
。如果你为英语键盘上的 [Slash] (/)键命名/
,我们就不会按它的替代品shift+7
去按了。我们会知道发生了什么事。事实上,我不知道为什么我们要像这样谈论这个问题,好像它不是已经存在的情况一样。我的ğ
键已经被命名为[BracketLeft]
了,而且没问题。以字母
ı
和İ
为例子吧。我的键盘上有一把键上面写着“I”,另一把上面写着“İ”。如果我不按 shift 就按下“I”键,它会打出“ı”,而另一把键会打出“i”。这些键是带有重音符号的字母,取决于它们是否大写。现在,这个用来识别“I”键的快捷键被命名为 “ı ”,幸运的是它起作用了,没有受到shift
组合的影响。最近它停止工作了。然而我的“Ğ”键却可以正常工作。想知道为什么吗?因为当我用它设置一个快捷键时,它显示 [BracketLeft] (左括号)。我从来没有想过要用shift+8
按住左括号来触发左括号。是的,法国人会在他们的键盘上看到一个
Q
(右方括号),他们会给它命名为[KeyA]
(左方括号)。没什么大不了的。这只是不合常理而已。我宁愿让那些有误导性的快捷键名称与有效的快捷键一起工作,也不愿意担心我的布局会影响到设置快捷键的过程。这些名称反正也不是给人看的。你可以在设置文件中使用有问题的名称,图形化快捷方式设置工具可以显示当前布局下它输入了什么。这样即使布局改变后快捷方式仍然有效。抱歉如果这有点情绪化,但我觉得这是一个不容置疑的问题,我只是无法忍受一直遇到问题。即使解决了这些问题,它们还会再次出现。这是键盘快捷键的问题。按键被Map到动作上。不需要与它们输入的内容有关。只是一些按键除了这个之外还能做什么而已。
qojgxg4l7#
@toramanlis 说得对。我最近在Windows、Mac和Win/Mac之间切换使用VSCode,遇到了同样的问题。今天之前一直有效的快捷键突然失效了。
在键绑定编辑器中,当我按下cmd+[数字1左边的按钮时,我看到了3种不同的情况:
在键盘调试器中,我得到了这个:
不确定是否完全相同,但似乎有些混乱。现在我主要烦恼的是其中一个我经常使用的快捷键失效了。
mkh04yzy8#
这个问题似乎有了进展(在两个方面)。它仍然依赖于输入的字符,但已经向内部人员提供了修复:
173515 (评论)