Mac键盘最上面一排F1~F12,默认是一些OS X系统的功能,比如调节亮度、音量、键盘灯亮度等等,非常实用。但是最近开始用PyCharm写python代码,发现调试的时候,每次用F7,F8 做 step in,step over之类的操作,需要按住 fn + F7 和 fn + F8,感觉比较麻烦。所以就想用karabiner来做键盘映射。
karabiner 之前叫 KeyRemap4MacBook 用它可以设置很多键盘的映射关系。其实单独改Function Key的映射,mac上有不少软件都能做。但是karabiner的优势在于,可以只针对特定的程序来设置映射关系。
想要实现的效果就是,在使用PyCharm时,按F3~F10不再触发OS X默认的那些功能,比如按F10键不再是静音,而就是触发F10(OS X默认状态下的Fn + F10)。
安装 karabiner 之后,Preferences -> Misc & Uninstall -> Open private.xml
打开private.xml
配置文件,设置文件内容如下,即可实现想要的映射。
<?xml version="1.0"?>
<root>
<appdef>
<appname>PYCHARM</appname>
<equal>com.jetbrains.pycharm</equal>
</appdef>
<item>
<name>custom settings</name>
<item>
<name>Change Functional Keys to F3...F10 for PyCharm</name>
<identifier>remap.app_pycharm_functional2function</identifier>
<only>PYCHARM</only>
<autogen>__KeyToKey__ KeyCode::EXPOSE_ALL, KeyCode::F3</autogen>
<autogen>__KeyToKey__ KeyCode::DASHBOARD, KeyCode::F4</autogen>
<autogen>__KeyToKey__ KeyCode::LAUNCHPAD, KeyCode::F4</autogen>
<autogen>__KeyToKey__ ConsumerKeyCode::KEYBOARDLIGHT_LOW, KeyCode::F5</autogen>
<autogen>__KeyToKey__ ConsumerKeyCode::KEYBOARDLIGHT_HIGH, KeyCode::F6</autogen>
<autogen>__KeyToKey__ ConsumerKeyCode::MUSIC_PREV, KeyCode::F7</autogen>
<autogen>__KeyToKey__ ConsumerKeyCode::MUSIC_PLAY, KeyCode::F8</autogen>
<autogen>__KeyToKey__ ConsumerKeyCode::MUSIC_NEXT, KeyCode::F9</autogen>
<autogen>__KeyToKey__ ConsumerKeyCode::VOLUME_MUTE, KeyCode::F10</autogen>
</item>
</item>
</root>
参考文档:
https://pqrs.org/osx/karabiner/document.html#privatexml https://pqrs.org/osx/karabiner/xml.html.en
2016-06-21 11:53:28 更新
-
private.xml
中appdef
定义时,需要知道应用程序的bundle identifiers
。如何知道某个应用程序的bundle identifiers
呢?> osascript -e 'id of app "WebStorm"' com.jetbrains.WebStorm > osascript -e 'id of app "Pycharm"' com.jetbrains.pycharm
-
如何对多个特定程序应用同一套规则?
上面的
private.xml
中,通过如下对规则使配置仅对PYCHARM生效。<only>PYCHARM</only>
如果要对WebStorm也使用同样的配置,可以增加一个appdef
<appdef> <appname>WebStorm</appname> <equal>com.jetbrains.WebStorm</equal> </appdef>
再在
only
中写上<only>PYCHARM, WebStorm</only>
appdef
也支持按照前缀来做。比如想把jetbrains的IDE全部都包含进去,可以这样配置<appdef> <appname>JETBRAINS_IDE</appname> <prefix>com.jetbrains.</prefix> </appdef>
Last modified on 2015-11-17