Vscode: Neo键盘布局:一些按键停止工作

创建于 2017-04-06  ·  28评论  ·  资料来源: microsoft/vscode

  • VSCode版本:Code 1.11.0(9122ec4b1068bd391e41974f46a4b54c1b9c90f9,2017-04-05T21:13:24.700Z)
  • 操作系统版本:Linux x64 4.4.0-72-generic

重现步骤:

  1. 安装并激活Neo键盘布局
  2. 在VS代码中打开任何源文件
  3. 将光标放在文件中的某个位置
  4. 按住M4键。 按s键(见图)
  5. 光标没有向左移动,什么也没有发生

在VSCode的早期版本(1.10.2 8076a19fdcab7e1fc1707952d652f0bb6c6db331)中,此方法工作正常。

tastatur_e4b png

bug help wanted keyboard-layout linux

最有用的评论

我需要一些时间来了解这种键盘布局。 如果您足够友好地帮助我,我将在未来几天对您进行检查。 这与我所见过的不同。

再次将VS Code切换为基于关键代码进行调度的解决方法。 添加以下设置:
"keyboard.dispatch": "keyCode"并重新启动VS Code

所有28条评论

对我来说也是一样。 发出关键字是因为我最初没有发现此问题:4层箭头键neo2德语键盘布局。

在1.10中正常工作,在1.11中无效。

VSCode中的快捷方式编辑器似乎将上面键盘中突出显示的组合标识为[IntlBackslash] i

在Windows和VSCode 1.11.0上没有损坏。
但是,键盘映射是由autohotkey完成的,它会拦截按键并发出自己的信号-AFAIK在Linux中的处理方式有所不同。

我只运行了git bisect 。 第一个错误提交似乎是https://github.com/Microsoft/vscode/commit/d10239639bf9beaa6ea3412​​5319103de3dce43cd (@alexandrudima)

# bad: [9122ec4b1068bd391e41974f46a4b54c1b9c90f9] Fix styling of release notes (fixes #23948)
# good: [8076a19fdcab7e1fc1707952d652f0bb6c6db331] debug: save all untitled non dirty files before debug start
git bisect start '1.11.0' '1.10.2'
# good: [40fecfaa77f01672e8a147be71f6f7ccb9cf8a12] fix mixin
git bisect good 40fecfaa77f01672e8a147be71f6f7ccb9cf8a12
# good: [9d2e0611f7f7750f02ec72c4d18a20b69c5bf8cf] #18095 :lipstick:
git bisect good 9d2e0611f7f7750f02ec72c4d18a20b69c5bf8cf
# bad: [7c223972367b8ade5362d738606f3b910d0fbb42] Fixes #19235: Wording in tasks warning message
git bisect bad 7c223972367b8ade5362d738606f3b910d0fbb42
# good: [378231183e815c8e8e6a73ad04fc40ec5058fdc5] Promise cancellation is slow. Use a timer instead since this may run many times.
git bisect good 378231183e815c8e8e6a73ad04fc40ec5058fdc5
# good: [f70b0b3ecb7f276c811b0f18c7a0bec3b03c11a6] Fixes #22069: Define extension story for tasks
git bisect good f70b0b3ecb7f276c811b0f18c7a0bec3b03c11a6
# bad: [4ad4bd0d8011a5db5e2bea4543b7efb03d482aad] :bug: add commit box message
git bisect bad 4ad4bd0d8011a5db5e2bea4543b7efb03d482aad
# bad: [9003dbc3f5f2b87cb3cc4a3418030dbdc45ac0a3] Add IKeybindingService.resolveUserBinding
git bisect bad 9003dbc3f5f2b87cb3cc4a3418030dbdc45ac0a3
# bad: [968da131589845b43c0d00141b41b2bb366a84e8] Improve the ScanCode -> KeyCode guessing strategy
git bisect bad 968da131589845b43c0d00141b41b2bb366a84e8
# bad: [969cbdfea05beda1a38d4082698b87f239fc2384] Renames
git bisect bad 969cbdfea05beda1a38d4082698b87f239fc2384
# bad: [8a33db65efdd3ed4c76d01cb76c3ef658caf16db] Add Inspect Key Mapppings action
git bisect bad 8a33db65efdd3ed4c76d01cb76c3ef658caf16db
# bad: [0ebecd5ca915ed33ea747cafe2c99572c52904b5] Merge branch 'master' into alex/keybinding
git bisect bad 0ebecd5ca915ed33ea747cafe2c99572c52904b5
# bad: [d10239639bf9beaa6ea34125319103de3dce43cd] First cut at integrating keyboard mappers
git bisect bad d10239639bf9beaa6ea34125319103de3dce43cd
# first bad commit: [d10239639bf9beaa6ea34125319103de3dce43cd] First cut at integrating keyboard mappers

我需要一些时间来了解这种键盘布局。 如果您足够友好地帮助我,我将在未来几天对您进行检查。 这与我所见过的不同。

再次将VS Code切换为基于关键代码进行调度的解决方法。 添加以下设置:
"keyboard.dispatch": "keyCode"并重新启动VS Code

我在Debian / Jessie上遇到了同样的问题。

https://github.com/Microsoft/vscode/issues/25797

我在退格键上遇到了问题。

嗨,我有同样的问题。 昨天,该解决方法对我有用,但是今天,它不再起作用。 编辑器启动后,它会工作约2秒钟,然后我的基本键(字母)不再起作用。 :思维:
我不确定自昨天以来我是否做过一些愚蠢的事情,但是不知道为什么会这样吗?

@zommerfelds我要检查的第一件事是settings.json 。 是"keyboard.dispatch"在那里重复吗,是在打开文件夹时被工作空间设置覆盖的设置,等等。

接下来要看的是打开编辑器并运行F1 > Developer: Inspect key mappings 。 是否打印“ keyCode上的FallbackKeyboardMapper调度”(指示已应用设置)。

如果这不是设置的问题,即确认已在keyCode上完成调度,那么我将尝试查看按特定键时Electron / Chromium / OS发送的方式:请将鼠标悬停在输入框上并截图:
keyboard-input

您好@alexandrudima ,谢谢您的详细回答。

cat ~/.config/Code/User/settings.json

// Place your settings in this file to overwrite the default settings
{
    "keyboard.dispatch": "keyCode"
}

如果我打开编辑器并转到_File => Preferences => Settings_,我会看到与_USER SETTINGS_相同的内容,对于{} _

_F1>开发人员:检查键映射_给了我:

Layout info:
{
    "model": "pc105",
    "layout": "de,ch",
    "variant": "neo,",
    "options": "grp:menu_toggle",
    "rules": "evdev"
}
FallbackKeyboardMapper dispatching on keyCode

Raw mapping:
...

对于键绑定,我得到:

如果我想输入“ a”:
image

如果我想输入“(”:
image

在该弹出窗口中打印一个就好了,但是在主编辑器中却没有。

在Neo中, A是QWERTY中D键的位置,而QUERTY中(CapsLock+J
我可以在Neo的第4层中使用箭头键,但不能使用数字。 退格键有效。 输入无效。 Ctrl+Z适用于撤消(在Neo中)。

而且,正如我之前说的,在Vscode启动的最初几秒钟,一切正常,然后停止工作。

让我知道我是否可以通过其他方式提供帮助。 如果我可以再次开始使用Vscode,那就太棒了:)

编辑:为澄清起见,我认为我可能没有与OP相同的问题。 我在第4层中使用的箭头键有效,但不能使用普通字母键和简单字母键。

EDIT2:_Help => About_:

Version 1.12.2
Commit 19222cdc84ce72202478ba1cec5cb557b71163de
Date 2017-05-10T13:16:25.899Z
Shell 1.6.6
Renderer 56.0.2924.87
Node 7.4.0

谢谢@alexandrudima ! 更改"keyboard.dispatch": "code""keyboard.dispatch": "keyCode"File->Preferences->Settings帮我拿到M4层键(Esc键,导航键,退格键,删除数字)工作。

1.19.0上仍然对我不起作用。
我还注意到keyboard.dispatch设置没有任何区别。 在这两种设置中,导航键和退格键均有效,但数字和普通字母无效。
有没有办法让我验证vscode实际将其加载为keyCode并且不会以某种方式退回到code

其实我就可以了! NeoX扩展程序弄乱了我的设置。 禁用它可以解决此问题。 我不知道为什么要安装此扩展程序或其功能。 我仍然必须将keyboard.dispatchkeyCode才能工作。
对不起,谢谢您的支持。 是的,我现在可以使用vscode! :)

我想我们可以解决这个问题了吗?

当前的VS代码中仍然存在问题:

  • VS代码版本:代码1.20.0(c63189deaa8e620f650cc28792b8f5f3363f2c5b,2018-02-07T17:10:15.949Z)
  • 作业系统版本:Linux x64 4.13.0-32-generic

我在Ubuntu 17.10(Linux 4.13.0-36-generic)下使用带有VS Code 1.201的Neo-Layout也遇到了麻烦。 没有"keyboad.dispatch": keyCode -开关,我可以使用Neo2进行键入,但是甚至不能使用CTRL + C和CTRL + V,因为它将映射回默认布局(分别触发CTRL + R和CTRL + W )。

好吧,我刚刚尝试了“ keyboard.dispatch”,它告诉我“未知的配置设置”。 但是我的问题还是有些不同。

箭头键可以正常工作,但是例如撤消键不起作用。 当我按M4+z Visual Studio代码只能识别z 。 当我想将某些东西绑定到äöü之类的键上时,vscode会转换那些键(如果它是美国键盘的话)。 因此Ctrl+ü被识别为Ctrl+z 。 这太可怕了。

我确实将我的键盘与XKB程序映射为使用改良的dvorak键盘。

我使用ralt_switch选项,该选项用于将右alt键切换为meta键或额外的修饰符。
我确实在VSCode Insider中启用keyCode设置。
以下是我的XKB安装示例

image

VS将RAlt (aka Meta key) + s识别为End键。 +好
但是当我应该用Ctrl+RAlt (Meta)+sctrl+End键时,它将被识别为Ctrl+s ,这将保存文档。 -坏
猜猜我尝试几次按Ctrl+Right aka Ctrl+RAlt (Meta)+n来跳过某些单词时会发生什么。

我想Ctrl修饰符不能与meta键或Mod4之类的额外修饰符(或keyCode-ed修饰符)一起使用。
甚至Ctrl+Shift+RAlt (Meta)+s也可以节省。
但是Shift+Ralt (Meta)+s确实像Shift+End ,即+Good
就组合修饰符而言,您能否使ctrl的行为像shift?


我认为这是相关问题,但情况不同。
_标题提及新布局,这是自定义_

这与已解决的评论有关吗?
通过使用keyboard.dispatch'code',但仅适用于OSX。 我只是试过它在Linux Mint / Ubuntu中不起作用
https://github.com/Microsoft/vscode/issues/12393#issuecomment -288994081

我在Linux上。

版本1.21.1
提交79b44aa704ce542d8ca4a3cc44cfca566e7720f1
基准2018-03-14T14:46:30.761Z
壳牌1.7.9
渲染器58.0.3029.110
节点7.9.0
建筑x64

不幸的是, keyboard.dispatch解决方法似乎也不适用于我-至少不够好。 我可以使用重新定位的CapsLock (Mod3)在编辑器中插入程序员符号,例如/,\,[,]等,但不能在shift+/类的快捷方式中插入, shift+capslock+s物理按钮

尝试使用Mod3重新分配快捷方式显示unknown

unknown_key

好像提到了@sakasistem ,似乎按一定顺序的修饰键存在问题。

shift+/类的快捷方式属于BS,因此不应该存在。

它应该是?并让布局决定键入该字符所需的修饰符,或者布局独立于shift + scancode_slash 。 在第一个选项中,我只需键入? (无论我将其放在布局上的什么位置以及需要按哪些修饰符),在第二个布局中,我J在布局中键入一个大写字母/

与krux02相似,我必须分别为撤消和重做键入“ Ctrl +ü”和“ Ctrl + k”,但是我能够找到合适的“ keyboard.dispatch”设置,这似乎已经解决了问题。

操作系统:Ubuntu 18.04 LTS

VSCode:

版本1.23.1
提交d0182c3417d225529c6d5ad24b7572815d0de9ac
日期2018-05-10T16:04:33.747Z
壳牌1.7.12
渲染器58.0.3029.110
节点7.9.0
建筑x64

哦,天哪,我正在使用vscode Insider,只是为了等待解决此问题。
就像@sakasistem
我将ThinkPad与物理Qwerty键盘一起使用,将我的键盘映射修改为Linux Mint Sonya上具有xkb文件的自定义dvorak

这是键盘映射文件https://pastebin.com/cUAxDtAM
确切地说,它是用于基于debian的操作系统,Linux Mint。
将其放在dvorak-intl定义之前的/usr/share/X11/xkb/symbols/us
partial alphanumeric_keys xkb_symbols "dvorak-intl" {

它将导航魔术添加到dvorak布局中,它将表现upleftdownrightRAlt+c,RAlt+h,RAlt+t,RAlt+n (应该为i, j, k, l在qwerty上使用c, h, t, n ),它实际上可在大多数应用程序中使用ctrlshiftalt修饰符,但使用vscode。 Ctrl+RAlt+n应该跳下一个单词,但其行为类似于Ctrl + n并打开新选项卡。

Shift修饰符确实起作用,这使得Shift+RAlt+s将选择到行尾,它只是Ctrl修饰符,该修饰符触发了第一位的快捷方式。

好吧,这是pastebin的内容:

partial alphanumeric_keys
xkb_symbols "dvorak-shy" {

    name[Group1]= "English (Dvorak) by Shy";

    key <TLDE> { [       grave, asciitilde, dead_grave, dead_tilde  ] };

    key <AE01> { [      1,  exclam      ]   };
    key <AE02> { [      2,  at      ]   };
    key <AE03> { [      3,  numbersign  ]   };
    key <AE04> { [      4,  dollar      ]   };
    key <AE05> { [      5,  percent     ]   };
    key <AE06> { [      6,  asciicircum, dead_circumflex, dead_circumflex ] };
    key <AE07> { [      7,  ampersand   ]   };
    key <AE08> { [      8,  asterisk    ]   };
    key <AE09> { [      9,  parenleft,  dead_grave] };
    key <AE10> { [      0,  parenright  ]   };
    key <AE11> { [ bracketleft, braceleft   ]   };
    key <AE12> { [ bracketright, braceright,  dead_tilde] };

    key <AD01> { [  apostrophe, quotedbl, dead_acute, dead_diaeresis    ] };
    key <AD02> { [  comma,  less,   dead_cedilla, dead_caron    ] };
    key <AD03> { [      period, greater, dead_abovedot, periodcentered  ] };
    key <AD04> { [      p,  P       ]   };
    key <AD05> { [      y,  Y       ]   };
    key <AD06> { [      f,  F       ]   };
    key <AD07> { [      g,  G, Page_Up, Page_Up     ]   };
    key <AD08> { [      c,  C, Up, Up       ]   };
    key <AD09> { [      r,  R, dead_tilde, dead_tilde       ]   };
    key <AD10> { [      l,  L       ]   };
    key <AD11> { [  slash,  question    ]   };
    key <AD12> { [  equal,  plus        ]   };

    key <AC01> { [      a,  A       ]   };
    key <AC02> { [      o,  O       ]   };
    key <AC03> { [      e,  E       ]   };
    key <AC04> { [      u,  U       ]   };
    key <AC05> { [      i,  I       ]   };
    key <AC06> { [      d,  D, Home, Home       ]   };
    key <AC07> { [      h,  H, Left, Left       ]   };
    key <AC08> { [      t,  T, Down, Down       ]   };
    key <AC09> { [      n,  N, Right, Right     ]   };
    key <AC10> { [      s,  S, End, End     ]   };
    key <AC11> { [  minus,  underscore  ]   };

    key <AB01> { [   semicolon, colon, dead_ogonek, dead_doubleacute ] };
    key <AB02> { [      q,  Q       ]   };
    key <AB03> { [      j,  J       ]   };
    key <AB04> { [      k,  K       ]   };
    key <AB05> { [      x,  X       ]   };
    key <AB06> { [      b,  B       ]   };
    key <AB07> { [      m,  M, Page_Down, Page_Down     ]   };
    key <AB08> { [      w,  W       ]   };
    key <AB09> { [      v,  V       ]   };
    key <AB10> { [      z,  Z       ]   };

    key <BKSL> { [  backslash,  bar             ]       };


    key <CAPS> { [    BackSpace,    BackSpace,       BackSpace,        BackSpace ] };

    include "level3(ralt_switch)"
};

注意神奇的代码include "level3(ralt_switch)" ,使RAlt像mod3一样,但让vscode将其识别为unknown

这里的Linux,没有使用不寻常的键盘布局,我只通过XkbOptions Caps Lock映射到Backspace,但这也不起作用。 切换到keyCode使其起作用。 我猜这会影响任何类型的键映射。

对我来说,冒号:自发地停止了在macOS 10.14.3上的Visual Studio Code 1.32.3中工作。 Neo2中的组合键是caps lock + ; (在qwerty上)。 将keyboard.dispatchkeyCode有所帮助。

另一个neo2用户;)在使用VSCode的最初几分钟内偶然发现了Backspace-not-working问题。 幸运的是,到目前为止,解决方法仍然具有吸引力!
不过,如果有一天可以修复此错误,那就太好了;)

来自https://github.com/microsoft/vscode/issues/24043#issuecomment -292334048的变通办法适用于退格功能(:+1:),但向前/向后移动一个单词并删除光标前后的一个单词仍然不起作用:confused:,即Ctrl + Alt Gr + w (在qwerty布局/键盘上的键中)应该删除光标左边的一个单词,而只是粘贴剪贴板,即Ctrl + w (按qwerty布局/键盘上的键),即Ctrl + v
这似乎是Alt Gr按下当按键被不理Ctrl键。

我正在使用带有最新更新的Arch Linux。

如何提供更多信息以帮助解决此问题?

我是VS Code的新手,我在Linux( setxkbmap de koy )上使用KOY布局(进行了一些改动)。 与Neo2相同的问题:我可以通过在编辑器中按CapsLock+L来键入连字符。 但是包含CapsLock的快捷方式不起作用(例如使用Ctrl+- = Ctrl-CapsLock-L缩小)。

如果没有其他帮助,则“键绑定问题”页面建议运行F1 > Developer: Inspect key mappings

使用标准的德语布局( setxkbmap de ),我可以通过L键得到它:

    "KeyL": {
        "value": "l",
        "withShift": "L",
        "withAltGr": "ł",
        "withShiftAltGr": "Ł"
    }

使用KOY( setxkbmap de koy ),我得到:

    "KeyL": {
        "value": "n",
        "withShift": "N",
        "withAltGr": "n",
        "withShiftAltGr": "N"
    },

显然,VS Code无法获得更高级别的布局!

有关此键盘布局系列(neo,adnw,koy,bone)的一些其他技术信息:

在德语默认布局中, AltGr映射到ISO_Level3_Shift (在Linux中)。 在Neo2(及类似版本)中, AltGr映射到ISO_Level5_ShiftCapsLock映射到ISO_Level3_Shift

所以我认为,我们应该在> Developer: Inspect key mappings的输出中看到

    "KeyL": {
        "value": "n",
        "withShift": "N",
        "withAltGr": "-",

(因为CapsLock成为了新的ISO_Level3_Shift密钥,因此在Neo2中替换了AltGr)

要么

    "KeyL": {
        "value": "n",
        "withShift": "N",
        "withAltGr": "6",

(因为在按下OP的屏幕截图时,按下物理AltGr键和L键会得到“ 6”)。

我希望这可以帮助您VS Code开发人员更好地理解我们的问题。

我知道我(和其他人)在这里混合了一些有关Neo的问题。 但是它们可能是相关的。

在Ubuntu 18.04上使用此版本的VS Code / Codium进行了测试:

Version: 1.44.0
Commit: 2aae1f26c72891c399f860409176fe435a154b13
Date: 2020-04-09T10:44:46.342Z
Electron: 7.1.11
Chrome: 78.0.3904.130
Node.js: 12.8.1
V8: 7.8.279.23-electron.0
OS: Linux x64 4.15.0-96-generic

似乎在按下Ctrl键时,只是忽略了Alt Gr Ctrl键。

我有同样的问题。 当我通过AltGr + E输入RightArrow时,可以通过Shift + RightArrow标记单个字母,但是将Ctrl + Shift + RightArrow与Neo-layout配合使用,则分派Ctrl + Shift + E
我已经使用了按键录音功能,并使用了调度方法code

  • 按下Shift + AltGr + E将首先显示shift + alt ,然后变成shift + right
  • Ctrl + Shift + AltGr + E首先显示ctrl + shift + alt ,然后变成ctrl + shift + e

并使用方法keyCode

  • 按下Shift + AltGr + E将首先显示shift + oem_8 ,然后变成shift + right
  • Ctrl + Shift + AltGr + E显示ctrl + shift + oem_8 ctrl+shift+e

当只使用Ctrl + AltGr +E而变成ctrl + e而不是ctrl + right时,也会发生同样的情况。

对于此特定问题,将某个密钥标记为已失效也许是可行的解决方法? 像Neo这样的布局根本不需要VSCode来监听AltGr ,它只应处理组合按下时分派的键控代码。 此外,当通过使用两个Mod4键“锁定”该层时,按Ctrl + Shift + e被正确识别为ctrl + shift + right

我的布局信息:

"layout": {
        "model": "pc105",
        "layout": "de,de,gb",
        "variant": "neo,,",
        "options": "grp_led:scroll,altwin:alt_super_win",
        "rules": "evdev"
    }

我多次遇到这里所述的相同问题,其中按住control或类似键会使neo布局的第4级中的某些键不可用,并执行不需要的快捷键。

我的解决方法

Ubuntu 18.04为我工作并解决了所有这些问题的方法是,在启动和每次唤醒后运行setxkbmap -layout de -variant neo 。 似乎可以使用keyboard.dispatch任何设置( keyCodecode )。

启动

"Startup Application Preferences"->Add输入setxkbmap -layout de -variant neo然后保存Screenshot

醒来

随着sudoedit /lib/systemd/system-sleep/setxkbmap添加

#!/bin/bash
case $1 in
  post)
    DISPLAY=:1 ; export DISPLAY
    su $USER -c "sleep 1; setxkbmap -layout de -variant neo"
  ;;
esac

并使用sudo chmod 755 /lib/systemd/system-sleep/setxkbmap赋予可执行权限。

  • 代替$USER添加您的用户。
  • 我在其他任何地方都发现DISPLAY=:0建议的echo $DISPLAY:1 )获得的值起作用。
  • 如果它不起作用,请尝试更长的延迟(例如,代替sleep 1; ,使用sleep 3;

希望这对其他人有帮助!

此页面是否有帮助?
0 / 5 - 0 等级