vscode 一些默认的快捷键在非英文布局下无法使用,例如:cmd + .等,

uubf1zoe  于 4个月前  发布在  Vscode
关注(0)|答案(8)|浏览(72)

问题描述

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

uz75evzq

uz75evzq1#

感谢您的建议。我们已经考虑过这个问题,但是虽然在俄语键盘布局上 [Period] 可以这样输入,但这并不适用于所有键盘布局。我立刻想到的一些例子:

  • 在德语键盘布局上,/ 通过 Shift+[Digit7] 生成。使用德语键盘布局的用户期望切换行注解是 Cmd+Shift+[Digit7] ,而不是 Cmd+[Slash]

  • 在法语键盘布局( AZERTY )上,用户期望全选是 Cmd+[KeyQ] 而不是 Cmd+[KeyA]

  • 在 Dvorak 键盘布局上,用户期望撤销是 Cmd+[Slash] 而不是 Cmd+[KeyZ] :

hfsqlsce

hfsqlsce2#

同时,我可以尝试改进我们的启发式方法来处理像俄罗斯语这样的布局(如果没有产生 . 的键,我们可以添加一个回退,使得 [Period] 产生 . ,并使用 [Period] 作为涉及 . 的默认键绑定的物理键,就像我们已经为所有字母 A - Z 所做的那样)。

在我看来,解决这个问题有两种方法:

p8h8hvxi

p8h8hvxi3#

哦,我明白了...但是为什么不保留两者呢?即:

  • cmd + ., - 这样德语/法语/Dvorak等语言的用户可以使用他们特定的快捷键

并且,如果没有这样的操作,传播到我所谓的“默认英语热键”:

  • cmd + [句点], - 这尊重英语布局快捷键,尽管当前选择了布局

这样你就可以实现两者,并满足两个观众。在其他情况下,大约2%的边缘情况,当与用户设置或其他事物冲突时,VSCode将尊重特定语言的快捷键。听起来不错,不是吗?
因为我的情况中,我没有对cmd + ю执行任何操作,所以发生的事情是:什么都没有(而不是触发“快速修复”操作)。同样适用于cmd + shift + х和cmd + shift + ъ, - 也是什么都没有(而不是导航选项卡)。我希望它们在这种情况下传播到各自的英语快捷键。
P.S.多年来使用VSCode时,我没有遇到这个问题,因为我一直纯粹将其用作代码编辑器,或者编写英文文档,但从未需要在VSCode中使用俄语语言。直到最近,我才开始使用它来编写俄语文章和俄语文档等。

os8fio9y

os8fio9y4#

刚刚偶然发现了错误的热键。这次更改的原因是什么?
在Mac上,热键与键盘布局无关。每个应用程序都使用cmd + .(键码190)打开设置,独立于选择的语言。

2izufjch

2izufjch5#

哦,实际上我刚刚重新阅读了我的消息,发现它有两个令人困惑的地方:

  1. 有一次我不小心写成了 cmd + , 而不是 cmd + .(现在已经修复)
  2. 我有一些多余的不重要细节(现在已经删除)
    所以自从我编辑了原始消息后,你能麻烦再读一遍吗,@daniilshustov 和 @alexdima?
    此外,@daniilshustov,- 你似乎误解了快捷键。每个应用程序都用 cmd + 打开设置,而不是用 cmd + 。😀 所以关键代码是 188,而不是 190。但重要的是,当我在操作系统中选择俄语时,VSCode不会打开它。正如我最初所说的:不幸且令人恼火。所以你的陈述,@daniilshustov:
    在 Mac 上热键不受键盘布局影响
    错误。虽然对于其他应用程序来说是正确的,但对于 VSCode 来说并非如此。这就是这个问题所在。
bis0qfac

bis0qfac6#

我不是这个更改背后的逻辑的粉丝,但如果它能正常工作的话,我可以接受。我不能像 ctrl+ı 那样使用快捷键,但我可以使用 ctrl+alt+ı 。我的很多快捷键突然之间就不起作用了,原因不明。我不知道为什么,但我知道如何避免这种情况。完全消除将按键与其输出关联在一起的做法。这与不同的布局不同,并导致问题。这从来都不是一个好主意,而且我从未在任何应用程序中看到它能正常工作。
这不仅仅是不同的布局。它还可以在操作系统的其他级别上进行修改。我在 LeftShift+RightShift 上设置了 Caps Lock ,而 Caps Lock 键的输出是 Alt Gr 。顺便说一下,这是我一生中做出的最佳决定。这是通过 KDE 设置的。你能诚实地说你考虑到了这些情况吗?如果我尝试将 Caps Lock 键用作 Alt GrShift_3 或其他快捷键,你能知道吗?
谢谢你的建议。我们已经考虑过这个问题,但虽然这可能适用于俄语键盘布局上的 [Period] ,但这并不适用于所有键盘布局。我脑海中立即想到的一些例子:

  • 在德语键盘布局上, / 通过 Shift+[Digit7] 产生。使用德语键盘布局的用户期望切换行注解是 Cmd+Shift+[Digit7] ,而不是 Cmd+[Slash]

  • 在法语键盘布局( AZERTY )上,用户期望选择所有内容是 Cmd+[KeyQ] ,而不是 Cmd+[KeyA]

  • 在 Dvorak 键盘布局上,用户期望撤销是 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到动作上。不需要与它们输入的内容有关。只是一些按键除了这个之外还能做什么而已。

qojgxg4l

qojgxg4l7#

@toramanlis 说得对。我最近在Windows、Mac和Win/Mac之间切换使用VSCode,遇到了同样的问题。今天之前一直有效的快捷键突然失效了。

在键绑定编辑器中,当我按下cmd+[数字1左边的按钮时,我看到了3种不同的情况:

在键盘调试器中,我得到了这个:

不确定是否完全相同,但似乎有些混乱。现在我主要烦恼的是其中一个我经常使用的快捷键失效了。

mkh04yzy

mkh04yzy8#

这个问题似乎有了进展(在两个方面)。它仍然依赖于输入的字符,但已经向内部人员提供了修复:

173515 (评论)

相关问题