将IntelliJ键绑定导入Xcode

时间:2017-08-18 12:05:06

标签: xcode macos intellij-idea key-bindings keymapping

是否有一个Xcode的键盘图,它会使它的行为与JetBrains的产品相同? (IntelliJ键映射)

我尝试使用谷歌搜索,但谷歌在这种情况下是完全没用的,因为它在搜索“将intellij键绑定到xcode中时”将相反的结果呈现(将Xcode键映射导入IntelliJ产品)。

我不希望看到自己手动重新分配所有绑定:)

2 个答案:

答案 0 :(得分:2)

我刚刚创建了一个存储库,并将部分IntelliJ绑定迁移到了xCode模板(包括自定义重复行)。随意看一下,尝试一下并不断改进。遗憾的是,我们实现此目标的唯一方法是手动完成。

https://github.com/FrangSierra/Xcode-IntelliJ-Keybinds

还有另一个主题为深色IntelliJ的存储库,以防万一您觉得有趣!

https://github.com/FrangSierra/Xcode-IntelliJ-Dark-Color-Theme

答案 1 :(得分:1)

TL; DR:这两个编辑器处理键绑定的方式似乎都不可能。


我使用AppCode 2019.2和Xcode 10对此进行了测试。我首先尝试找到两个IDE在磁盘上将其键盘映射文件保存在何处。


Xcode将其键盘映射文件保存在⁨Library⁩ ▸ ⁨Developer⁩ ▸ ⁨Xcode⁩ ▸ ⁨UserData⁩ ▸ ⁨KeyBindings⁩中并作为.idekeybindings文件。在TextEdit中打开它发现它是一个plist格式的文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

我发现它为空感到有些惊讶,但决定尝试通过设置自定义按键绑定来手动触发更新。再次打开文件表明Xcode仅存储键绑定的差异:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Menu Key Bindings</key>
    <dict>
        <key>Key Bindings</key>
        <array>
            <dict>
                <key>Action</key>
                <string>orderFrontAboutPanel:</string>
                <key>Alternate</key>
                <string>NO</string>
                <key>CommandID</key>
                <string>Xcode.IDEKit.CmdDefinition.AboutXcode</string>
                <key>Group</key>
                <string>Xcode Menu</string>
                <key>GroupID</key>
                <string>Xcode.IDEKit.MenuDefinition.Main</string>
                <key>GroupedAlternate</key>
                <string>NO</string>
                <key>Keyboard Shortcut</key>
                <string>~`</string>
                <key>Navigation</key>
                <string>NO</string>
                <key>Title</key>
                <string>About Xcode</string>
            </dict>
        </array>
        <key>Version</key>
        <integer>3</integer>
    </dict>
</dict>
</plist>

因此,从理论上讲,如果我们只是从Intellij获得了键绑定,并将其格式化为类似于Xcode的键绑定,那应该没问题


然后,我们转向Intellij平台。幸运的是,对于这些because Intellij already documented them密钥文件,我不必做很多事情。

用于Intellij的键盘映射位于~/Library/Preferences/IntelliJIdea2019.2/keymaps下。就我而言(使用AppCode),它在~/Library/Preferences/AppCode2019.2/jba_config/mac.keymaps/下,令我惊讶的是,它也是空的。尝试设置手动键绑定的行为与我在Xcode中看到的行为类似:

<keymap version="1" name="Default for macOS copy" parent="Mac OS X 10.5+">
   <action id="EditorBackwardParagraph">
     <keyboard-shortcut first-keystroke="shift ctrl meta alt back_quote" />
   </action>
</keymap>

不幸的是,上述链接的同一文档也证实了这一点,其中指出:

  

每个键映射文件仅包含相对于父键映射的差异。


因此,除非您自定义每个键绑定,否则当前无法将键绑定从一个导出到另一个。当然,you can do it manually,但正如您所说的那样,适得其反。