rubymineのキーバインドをemacs風になるようにカスタマイズした
rubymineがなかなかいい感じ
いままでは使用する言語にかかわらず、すべてemacsで開発をしてきました。長年かけて.emacs.dをいじり続けてきたのですごく愛着もあります。
nanapiはPHPで作られていますが、それ以外のプロダクトを一部railsでかいていたりします。
そんなこともあり、弊社のPhpStormを愛しすぎている人の強いプッシュにより、最近はrailsを使う場合はrubymineで開発していたりします。
キーバインドをいじりたい
それでもやっぱりキーマップはemacsがいいんです。手に馴染みすぎている。IDEを使うときはできるだけIDEの作法に従いたいのですが、さすがに苦痛なのでemacs風のキーバインドにしています。
ちなみに、rubymineの標準のキーマップの選択肢にもemacs風のものはあるのですがあまり使い物になりません。
そのため、今回は標準のemacs風のキーマップを自分なりにカスタマイズしました。
keymapの設定ファイル
設定ファイル自体は、IDE上からexportできるのですがjarファイルになっていて変更点とかが確認できません。
ちょっと調べてみるとxmlファイルで管理しているようです。以下のパスにあるファイルに記載してあります。
あ、ちなみにこれはMacの場合です。他のOSだとどうなんだろう。
ls ~/Library/Preferences/RubyMine50/keymaps/Emacs\ copy.xml
変更した点
標準のEmacs風キーバインドに以下の変更点を加えたら、わりと使える感じになりました!
100%同じものにはできないのである程度はなれないといけませんが、エディタとしての操作はこれでかなり似ると想います。
ActionID | 実施内容 | ショートカット |
---|---|---|
CommentByBlockComment | コメントアウト | meta SLASH |
Editor Copy | コピー | meta W |
EditorBackSpace | バックスペース | control H |
EditorDeleteToWordEnd | 前方単語削除 | meta H |
EditorEnter | エンター | control M |
EditorMatchBrace | 対応するカッコへ移動 | control meta P, control meta N |
EditorNextWord | 次の単語へ移動 | meta F |
EditorPageUp | ページアップ | meta V |
EditorPreviousWord | 前の単語へ移動 | meta B |
EditorScrollToCenter | 画面を中央にセット | control L |
EditorTextEnd | エディタの最後へ移動 | shift meta PERIOD |
EditorTextStart | エディタの先頭へ移動 | shift meta COMMA |
NextSplitter | 次のウィンドウへ移動 | C-X 0 |
Replace | 置換 | shift meta 5 |
xmlはこんな感じ
上記で書いてない部分もありますが、ほぼこんな感じです。
<?xml version="1.0" encoding="UTF-8"?> <keymap version="1" name="Emacs copy" parent="Emacs"> <action id="$Copy"> <keyboard-shortcut first-keystroke="alt C" /> <keyboard-shortcut first-keystroke="ESCAPE" second-keystroke="W" /> <keyboard-shortcut first-keystroke="meta W" /> </action> <action id="CheckinProject" /> <action id="CommentByBlockComment"> <keyboard-shortcut first-keystroke="shift control SLASH" /> <keyboard-shortcut first-keystroke="shift control DIVIDE" /> <keyboard-shortcut first-keystroke="meta SEMICOLON" /> <keyboard-shortcut first-keystroke="control C" second-keystroke="control C" /> <keyboard-shortcut first-keystroke="meta SLASH" /> </action> <action id="Editor Copy"> <keyboard-shortcut first-keystroke="meta W" /> </action> <action id="EditorBackSpace"> <keyboard-shortcut first-keystroke="BACK_SPACE" /> <keyboard-shortcut first-keystroke="shift BACK_SPACE" /> <keyboard-shortcut first-keystroke="control H" /> </action> <action id="EditorDeleteToWordEnd"> <keyboard-shortcut first-keystroke="control DELETE" /> <keyboard-shortcut first-keystroke="meta D" /> </action> <action id="EditorDuplicate" /> <action id="EditorEnter"> <keyboard-shortcut first-keystroke="ENTER" /> <keyboard-shortcut first-keystroke="control M" /> </action> <action id="EditorMatchBrace"> <keyboard-shortcut first-keystroke="control meta P" /> <keyboard-shortcut first-keystroke="control meta N" /> </action> <action id="EditorNextWord"> <keyboard-shortcut first-keystroke="control RIGHT" /> <keyboard-shortcut first-keystroke="alt F" /> <keyboard-shortcut first-keystroke="ESCAPE" second-keystroke="control F" /> <keyboard-shortcut first-keystroke="meta F" /> </action> <action id="EditorPageUp"> <keyboard-shortcut first-keystroke="PAGE_UP" /> <keyboard-shortcut first-keystroke="control Z" /> <keyboard-shortcut first-keystroke="alt V" /> <keyboard-shortcut first-keystroke="meta V" /> </action> <action id="EditorPreviousWord"> <keyboard-shortcut first-keystroke="control LEFT" /> <keyboard-shortcut first-keystroke="alt B" /> <keyboard-shortcut first-keystroke="ESCAPE" second-keystroke="control B" /> <keyboard-shortcut first-keystroke="meta B" /> </action> <action id="EditorScrollToCenter"> <keyboard-shortcut first-keystroke="control L" /> </action> <action id="EditorTextEnd"> <keyboard-shortcut first-keystroke="control END" /> <keyboard-shortcut first-keystroke="shift alt PERIOD" /> <keyboard-shortcut first-keystroke="shift meta PERIOD" /> </action> <action id="EditorTextStart"> <keyboard-shortcut first-keystroke="control HOME" /> <keyboard-shortcut first-keystroke="shift alt COMMA" /> <keyboard-shortcut first-keystroke="ESCAPE" second-keystroke="COMMA" /> <keyboard-shortcut first-keystroke="shift meta COMMA" /> </action> <action id="NextSplitter"> <keyboard-shortcut first-keystroke="control X" /> <keyboard-shortcut first-keystroke="control X" second-keystroke="O" /> </action> <action id="NextTab"> <keyboard-shortcut first-keystroke="alt RIGHT" /> <keyboard-shortcut first-keystroke="control X" second-keystroke="N" /> <keyboard-shortcut first-keystroke="shift meta BACK_SLASH" /> </action> <action id="PreviousTab"> <keyboard-shortcut first-keystroke="alt LEFT" /> <keyboard-shortcut first-keystroke="control X" second-keystroke="P" /> <keyboard-shortcut first-keystroke="shift meta CLOSE_BRACKET" /> </action> <action id="Replace"> <keyboard-shortcut first-keystroke="shift alt 5" /> <keyboard-shortcut first-keystroke="shift meta 5" /> </action> <action id="SaveAll"> <keyboard-shortcut first-keystroke="control X" second-keystroke="control S" /> <keyboard-shortcut first-keystroke="meta S" second-keystroke="control S" /> </action> <action id="SwitchApply"> <keyboard-shortcut first-keystroke="control alt ENTER" /> </action> <action id="SwitchDown"> <keyboard-shortcut first-keystroke="control alt DOWN" /> </action> <action id="SwitchLeft"> <keyboard-shortcut first-keystroke="control alt LEFT" /> </action> <action id="SwitchRight"> <keyboard-shortcut first-keystroke="control alt RIGHT" /> </action> <action id="SwitchUp"> <keyboard-shortcut first-keystroke="control alt UP" /> </action> <action id="TypeHierarchy" /> <action id="org.jetbrains.plugins.ruby.rails.actions.navigation.SwitchToView"> <keyboard-shortcut first-keystroke="control C" second-keystroke="V" /> </action> </keymap>
とまぁこんなかんじです。ただ、あくまで自分のつかっているemacs風なのでまっさらなemacsにどこまで近いかはわかりません。