如何针对特定应用程序禁用“ApplePressAndHoldEnabled”(重复按键而不是显示重音菜单)?

Nei*_*eil 13 intellij-idea

我在 Mac OS Yosemite 10.10.5 中使用 IntelliJ IDEA 14.1.4 社区版。

我已经知道全局ApplePressAndHoldEnabled修复:

defaults write -g ApplePressAndHoldEnabled -bool false
Run Code Online (Sandbox Code Playgroud)

但我只想为 IntelliJ IDEA 禁用它,并且在 Scala 中使用“IdeaVim”插件时(需要重新启动 IDEA),这些命令都不起作用:

defaults write com.jetbrains.intellij.ce ApplePressAndHoldEnabled -bool false
defaults write com.jetbrains.intellij ApplePressAndHoldEnabled -bool false
defaults write com.jetbrains.AppCode ApplePressAndHoldEnabled -bool false
Run Code Online (Sandbox Code Playgroud)

或此处列出的任何其他命令。

如何禁用ApplePressAndHoldEnabled特定应用程序?

Nei*_*eil 17

这是该问题的规范、完整的解决方案:

设置ApplePressAndHoldEnabled

ApplePressAndHoldEnabledMac OS的布尔值defaults对应以下设置:

  • true=> show-character-accents-menu:按住键盘按键将弹出字符修改菜单,如下所示: “e”字符的字符重音菜单
  • false=> repeat-character-while-key-held:按住键盘按键将在延迟后连续重复该键,直到释放该键: 按键重复动画

如何show-character-accents-menu默认设置全局行为,但设置repeat-character-while-key-held每个应用程序的行为:

  1. 必须使用以下命令全局ApplePressAndHoldEnabled default取消设置(而不是设置为true或):false
defaults delete -g ApplePressAndHoldEnabled    # Unset globally
Run Code Online (Sandbox Code Playgroud)
  1. 必须使用以下命令为您希望设置行为的每个应用程序设置ApplePressAndHoldEnabled defaultfalserepeat-character-while-key-held
defaults write "$APP_ID" ApplePressAndHoldEnabled -bool false
Run Code Online (Sandbox Code Playgroud)

哪里$APP_ID有类似com.jetbrains.intellij.ce“IntelliJ IDEA Community Edition”的东西。

将此代码粘贴到终端中以设置repeat-character-while-key-held所有 IntelliJ IDE 的行为,但要show-character-accents-menu全局设置行为:

KEY='ApplePressAndHoldEnabled' \
&& defaults delete -g "$KEY" \
; echo \
&& APP_ID_PREFIX='com\.jetbrains\.' \
&& defaults read | egrep -o "${APP_ID_PREFIX}[^\"]+" | sort --unique \
| while read APP_ID; do
    echo "Setting \"repeat-character-while-key-held\" for application: '$APP_ID'..."
    defaults write "$APP_ID" "$KEY" -bool 'false'
done
Run Code Online (Sandbox Code Playgroud)

检查全局和特定于应用程序的设置值ApplePressAndHoldEnabled

可以这样检查值:

defaults read -g        ApplePressAndHoldEnabled    # Global
defaults read "$APP_ID" ApplePressAndHoldEnabled    # Per-application
Run Code Online (Sandbox Code Playgroud)

ApplePressAndHoldEnabled将此代码粘贴到终端以显示全局和每个应用程序的设置:

KEY='ApplePressAndHoldEnabled'
APP_ID_PREFIX='com\.jetbrains\.' \
&& echo \
&& printf "%-30s %-20s %-8s\n" \
    "Application" \
    "Type" \
    "Value" \
&& printf "%-30s %-20s %-8s\n" \
    "$(printf -- '-%.0s' {1..30})" \
    "$(printf -- '-%.0s' {1..16})" \
    "$(printf -- '-%.0s' {1..8})" \
&& (defaults read | egrep -o "${APP_ID_PREFIX}[^\"]+" | sort --unique && echo '-g') \
| while read APP_ID; do
    printf "%-30s %-20s %-4s\n" \
    "${APP_ID}" "\
    $(defaults read-type "${APP_ID}" "$KEY" 2> /dev/null || echo '(unset)')" \
    "$(defaults read "${APP_ID}" "$KEY" 2> /dev/null || echo '(unset)')"
done \
&& echo
Run Code Online (Sandbox Code Playgroud)

这是预期的输出:

Application                    Type                 Value
------------------------------ ----------------     --------
com.jetbrains.WebStorm         Type is boolean      0
com.jetbrains.intellij         Type is boolean      0
com.jetbrains.intellij.ce      Type is boolean      0
com.jetbrains.pycharm          Type is boolean      0
-g                             (unset)              (unset)
Run Code Online (Sandbox Code Playgroud)