【まとめ】Sublime TextをEclipse風キーバインドに変更するTips

はじめに
===================================================================

みなさん、Eclipseは好きですか？
世間ではIntelliJ IDEAの利用拡大が著しいですが、私はEclipseも大好きです！

さてそんな私ですが最近はSublime Textを用いてコーディングをすることが増えてきています。
しかしキー操作がSublime TextとEclipseの間で上手く頭を切り分けられず、SublimeTextなのにEclipseのショートカットキーを使ってしまって上手く動かない、なんて問題も多く起こっています。

エディタを複数用いる時に発生する悩みの一つかと思いますし、みなさんも困っていませんか？

その解決案として、わたしはSublime TextのキーバインドをEclipse風に変更して利用しています。
そうしたSublime TextのキーバインドをEclipse風のショートカットキーに変更する定義を調査して、ナレッジが溜まってきたので共有します。


環境
===================================================================
Sublime Text3 - Build 3083 
（おそらく2系でも動くと思いますが、未検証です）


キーバインドの設定方法
===================================================================

SublimeTextにおけるキーバインドの設定ファイルは、メニューの以下のところを押下すると開くことができます。

* Perferences -> Key Bindings - User
* 基本設定 -> キーバインド - ユーザ


ショートカットキー設定ファイル
====================================================================

* オリジナルはこちらで管理していますので、ぜひ参考にして下さい。
  * [GitHub： Default (Windows).sublime-keymap](https://github.com/NaoyaOura/sublime-eclipseKeyBinding-config/blob/master/Default%20(Windows).sublime-keymap)
* 
どの設定がどのショートカットに紐づくかはコメントに細かく記載したので、そちらをご参照ください。

* SublimeTextのショートカットに元から存在するキーバインドと重複している場合は、shiftを付きで新たに設定しています。
そのため他の人がカスタマイズしたSublimeTextに触る場合も、違和感なく使えるよう工夫しています！
※それらは、「eclipseにはない」のコメントを必ずつけて区別できるようにしています。

```json:Default(Windows).sublime-keymap
[
	//  --------------------------------------------------------------------
	// Eclipse化キーバインド
	// ---------------------------------------------------------------------
	// alt+左で戻る
	{ "keys": ["alt+left"], "command": "jump_back" }
	// alt+右で戻ったのをまた進める
	,{ "keys": ["alt+right"], "command": "jump_forward" }
	// 行削除
	,{ "keys": ["ctrl+d"], "command": "run_macro_file", "args": {"file": "Packages/Default/Delete Line.sublime-macro"} }
	// 行番号選択
	,{ "keys": ["ctrl+l"], "command": "show_overlay", "args": {"overlay": "goto", "text": ":"} }
	// 名前の変更（厳密には選択範囲と同一の文字列を全て選択）
	,{ "keys": ["shift+alt+r"], "command": "find_all_under" }
	// 選択中単語の次を検索
	,{ "keys": ["ctrl+k"], "command": "find_under" }
	,{ "keys": ["ctrl+shift+k"], "command": "find_under_prev" }
	// 行の入れ替え
	,{ "keys": ["alt+up"], "command": "swap_line_up" }
	,{ "keys": ["alt+down"], "command": "swap_line_down" }
	// 下行と文字を連結させる
	,{ "keys": ["ctrl+alt+j"], "command": "join_lines" }
	// 行複製
	,{ "keys": ["ctrl+alt+down"], "command": "duplicate_line" }
	,{ "keys": ["ctrl+alt+up"], "command": "duplicate_line" }
	// リソース検索
	,{ "keys": ["shift+ctrl+r"], "command": "show_overlay", "args": {"overlay": "goto", "show_files": true} }
	// 大文字 <-> 小文字変換
	,{ "keys": ["shift+ctrl+y"], "command": "lower_case" }
	,{ "keys": ["shift+ctrl+x"], "command": "upper_case" }
	// インデント揃え
	,{ "keys": ["ctrl+shift+f"], "command": "reindent" , "args": {"single_line": false}}
	// コメントアウトの切り替え(Eclipseにもあるコメントアウトするctrl+/, ctrl+shitt+/ は標準ショートカット)
	,{ "keys": ["ctrl+shift+c"], "command": "toggle_comment", "args": { "block": false } }
	// クイック・アウトライン
	,{ "keys": ["ctrl+o"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"} }
	// 全て保存する
	,{ "keys": ["ctrl+shift+s"], "command": "save_all" }
	// すべて閉じる
	,{ "keys": ["shift+ctrl+f4"], "command": "close_all" }
	,{ "keys": ["shift+ctrl+w"], "command": "close_all" }
	// F3で関数の宣言元にジャンプ
	,{ "keys": ["f3"], "command": "goto_definition" }
	// リフレッシュ(sublimeは基本オートリロード)
	,{"keys": ["f5"], "command": "revert"}
	// 実行（ビルド）
	,{ "keys": ["ctrl+f11"], "command": "build" }

	// ---------------------Sublime Text3 Orifinal Shortcut Key の割当て ---------------------------
	// ※元のショートカットが強力なものがある場合は、shiftをつける、またはaltを外して利用できるようにキーバインド新たに設定
	// ---------
	// Eclipseのショートカットではない（ctrl+dを行削除に設定したので、デフォルトにあった選択範囲の文字列をスタック選択）
	,{ "keys": ["shift+alt+d"], "command": "find_under_expand" }
	// Eclipseのショートカットではない（ctrl+oをクイック・アウトラインを設定したので、デフォルトにあったファイルを開く）
	,{ "keys": ["ctrl+shift+o"], "command": "prompt_open_file" }
	// Eclipseのショートカットではない（ctrl+alt+up,ctrl+alt+downに行複製を設定したので、デフォルトにあった矩形選択)
	,{ "keys": ["ctrl+up"], "command": "select_lines", "args": {"forward": false} }
	,{ "keys": ["ctrl+down"], "command": "select_lines", "args": {"forward": true} }

	//  -----------------------------------packageで補ったところ-----------------------------------
	// [ctrl+q] https://github.com/khrizt/GotoLastEdit
]
```

その他のおすすめキーバインド
=============================================

* Eclipseと直接関係無いですが、その他私のおすすめキーバインドです。
* 下記も同ファイルに追記すると複数ファイルを編集する時や、外部ディスプレイなどを利用している場合に効果を発揮します！

```json:おすすめキーバインド
	// タブ移動を横方向に移動
	,{ "keys": ["ctrl+tab"], "command": "next_view" }
	,{ "keys": ["ctrl+shift+tab"], "command": "prev_view" }
	// 開いているファイルのディレクトリをエクスプローラで開く
	,{ "keys": ["ctrl+e"], "command": "open_dir"
		, "args": {
			"dir": "$file_path", "file": "$file_name"
		}
	}
	// ショートカット一覧を表示（実質はこのファイルを表示する）…ちょっと無理やり
	,{ "keys": ["ctrl+shift+l"], "command": "open_file"
		,"args":
		{
			"file": "${packages}/User/Default ($platform).sublime-keymap",
			"contents": "[\n\t$0\n]\n"
		}
	}
	// ディスプレイ３分割
	,{
		"keys": ["alt+shift+6"], //ショートカットキー
		"command": "set_layout", //コマンド
		"args":
		{
			"rows": [0.0, 0.5, 1.0], //列方向の分割位置
			"cols": [0.0, 0.5, 1.0], //行方向の分割位置
			"cells": [[0,0,1,2], [1,0,2,1], [1,1,2,2]] //画面の構成
		}
	}
	,{
		"keys": ["alt+shift+7"], //ショートカットキー
		"command": "set_layout", //コマンド
		"args":
		{
			"rows": [0.0, 0.5, 1.0], //列方向の分割位置
			"cols": [0.0, 0.5, 1.0], //行方向の分割位置
			"cells": [[0,0,1,2], [1,0,2,1], [1,1,2,2]] //画面の構成
		}
	}
```

参考
=============================================

* 【本家サイト】 [Sublime Text 3 - Refelence / Key Bindings](http://docs.sublimetext.info/en/latest/reference/key_bindings.html)
* 【Qiita記事】 [sublime text3でeclipseのF3のような関数ジャンプキーバインドを設定する](http://qiita.com/hajimenbou/items/3db12ce198190b7e49b4?utm_content=bufferfcd72&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer)
* 【Qiita記事】[SublimeText2のキーバインドを、ちょっと突っ込んで解説](http://qiita.com/shibainurou/items/dc18f2dfc91e36adb208)
* 【Git】[Custom & Eclipse shortcuts key bindings (keyboard mapping) for Sublime Text 2 and 3](https://gist.github.com/thbkrkr/3194275)
* 【Sublime Text3 Package】[Sublime GotoLastEdit](https://github.com/khrizt/GotoLastEdit)


まとめ
=============================================

* Eclipseで習得したショートカットスキル資産をSublimeTextに転用することで仕事を捗らせる！
* SublimeTextに元からあるショートカットは尊重して残す工夫
* その他キーバインドもおススメです！