zsh
我在 Visual Studio Code 集成终端内运行tmux
。我有一个瑞典键盘,我的 Macbook 运行的是 macOS 10.15.4 Catalina。
为了使 meta-f 和 meta-d 等键在此环境中工作,我需要将 visual studio code 设置设置terminal.integrated.macOptionIsMeta
为true
(参见https://github.com/microsoft/vscode/issues/11314) 但如果我这样做,以下字符将停止工作@$|[]\{}
。静默推送它们会失败,不会打印任何内容。
如果我将其@$|[]
添加到.zshrc
bindkey -s "\e2" @ # option-2 maps to the at-sign
bindkey -s "\e4" \$ # option-4 maps to dollar
bindkey -s "\e7" \| # option-7 maps to vertical bar
bindkey -s "\e8" \[ # option-8 maps to left square bracket
bindkey -s "\e9" \] # option-9 maps to right square bracket
(这些是瑞典语 Mac 键盘上的正常映射,例如Option-7
通常会打印垂直条)
所以,我剩下的问题是如何使反斜杠、左花括号和右花括号(即)\{}
在此环境中再次工作。
在瑞典语键盘上,通常按 来输入反斜杠Option-Shift-7
。由于Shift-7
是斜杠 ( /
),我对此寄予厚望:
bindkey -s "\e/" \\
但这没有帮助。
- 我怎样才能
Option-Shift-7
打印反斜杠? - 我怎样才能
Option-Shift-8
打印左花括号? - 我怎样才能
Option-Shift-9
打印右花括号?
答案1
我通过查看找到了答案美式键盘布局
假设我有一个美国键盘,我可以映射相应的键,即使这些键不在瑞典键盘上的这些位置:
bindkey -s '\e&' \\ # option-shift-7 maps to backslash ('&' is found on the US keyboard!)
bindkey -s '\e*' \{ # option-shift-8 maps to left curly brace ('*' is found on the US keyboard!)
bindkey -s '\e(' \} # option-shift-9 maps to right curly brace ('(' is found on the US keyboard!)
例如:在瑞典键盘上&
是Shift- ,但在美式键盘上是- 。意思是,在 Mac 上是。这显然被解释为,尽管它“应该”在瑞典键盘上是。6Shift7\e&
Meta-&
Option-&
zsh
Option-Shift-7
Option-Shift-6
答案2
terminal.integrated.macOptionIsMeta
我发现设置为的方向true
是死路一条。读取输入的脚本仍然无法理解新配置的绑定键。
我最终设置回terminal.integrated.macOptionIsMeta
并映射另一种方式:我测试了按下字母false
时插入的 unicode 字符,然后对应该执行的 zsh 命令执行了。对于我的瑞典键盘,这是结果option
bindkey
# binding needed in VS Code integrated terminal when "terminal.integrated.macOptionIsMeta" is false
bindkey '' accept-and-hold # option-a
bindkey 'ƒ' forward-word # option-b
bindkey 'ç' fzf-cd-widget #option-c
bindkey '∂' delete-word #option-d
bindkey '›' backward-word # option-f
bindkey '¸' get-line # option-g
bindkey '˛' run-help #option-h
bindkey 'fi' down-case-word #option-l
bindkey '‘' history-search-forward #option-n
bindkey 'π' history-search-backward #option-p
bindkey '•' push-line #option-q
bindkey 'ß' spell-word #option-s
bindkey '†' transpose-words #option-t
bindkey 'ü' up-case-word #option-u
bindkey 'Ω' copy-region-as-kill #option-w
bindkey '≈' execute-named-cmd #option-x
bindkey 'µ' yank-pop #option-y