norinyang メガ進化!

気ままに色々

VimからSublime Text 3に移行してみた

Sublime Text っていうのがいけているらしいという事で vim から移行してみた

vim ライクな操作にするために色々やってなんとか違和感最小限で使えるようになったのでメモ
まぁ、vim もちゃんと使いこなせていたかと言われるとかなり怪しいのですが。。。

まずはインストール

下記URLから使っているパソコンにあわせてダウンロード&インストール

http://www.sublimetext.com/3

f:id:norisu0313:20131207211425p:plain

インストールできました。

パッケージコントローラーを入れる

Sublime Text のいいところの一つとしてプラグインが簡単に入れられる事&充実している所だと思います!
が、プラグインを入れるためにパッケージコントローラーを入れる必要があります

下記URLにバージョン毎に必要なコマンドが書かれているので、とりあえずコピーします

https://sublime.wbond.net/installation#st3

メニューバーから View > Show Console を選択します

f:id:norisu0313:20131207212730p:plain

すると下にコンソールが出てきます

f:id:norisu0313:20131207212844p:plain

ここに先ほどコピーしたコードを貼付けて実行します
ちなみに ver3 の場合は

import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())

再起動します(もしかしたらいらないかもです)
するとパッケージコントローラーが使えるようになります

vim っぽくする

ここから vim ライクになるように設定して行きます

設定編

Sublime Text には元々 vim ライクな操作が出来るようになる設定が存在します
なので、まずはそれを入れます

Sublime Text の設定は Settings - Default / Settings - User / Settings - More の3種類が存在します
Settings - Default と Settings - User が Sublime Text 全体の設定になります
Settings - More は拡張子毎の設定になります

Sublime Text > Preferences > Settings - User を開いてみて下さい
恐らくからのファイルが開くはずです

f:id:norisu0313:20131207213414p:plain

次に Settings - Default の方を開いてみるとなにやら色々設定が書かれていると思います

Settings - Default をいじってももちろん設定は反映されるのですが、名前の通り User に自分用の設定を追記して行きます
設定の反映順が Default > User > More になるので、Userに書いてある設定が Default に書いてある設定よりも優先されます

Vintageの有効化

下記のように User 用の設定ファイルに追記すると vim ライクな操作が出来るようになります

{
    "ignored_packages": []
}

これは適用しないパッケージはない、という設定です

Default の方を見ると

    // List any packages to ignore here. When removing entries from this list,
    // a restart may be required if the package contains plugins.
    "ignored_packages": ["Vintage"]

とかかれており、Vintage というパッケージが無視されている事が分かります
このVintageが vim ライクな操作が出来るようになるパッケージなのです

これで一応は vim ライクにはなりますが、vim から移行してきた人にとってはまだまだ使いにくい状態です

なので、下記の設定を追加します

	"vintage_ctrl_keys": true,
	"vintage_start_in_command_mode": true

vintage_ctrl_keys は ctrl キーを使用する vim のショートカットが使えるようにする設定です
vintage_start_in_command_mode はファイルを開いた時にコマンドモードで始まるようにする設定です

今設定は

{
        "ignored_packages": [],
	"vintage_ctrl_keys": true,
	"vintage_start_in_command_mode": true
}
Vintageouse の導入

これで大分マシにはなってきたはずですが、Vintageousというプラグインを入れる事でさらに vim らしくなります。(Sublime Text 2 では VintageExというプラグインだったようです)

Command+Shift+p をおすと下の画像のWindowが出るはずです
f:id:norisu0313:20131207215024p:plain

ここに Install と入れてみて下さい Package Control が見つかるので Enter をおすと
下の画像のWindowが出るはずです

f:id:norisu0313:20131207215110p:plain

ここにインストールしたいパッケージを入れるとプラグインがインストールされます
Vingateousと入れてみましょう

これで%sでの置換なども出来るようになります
(具体的に何が出来るようになるかは忘れました。。。)

ちなみに下記URLからパッケージコントローラーで入れられるプラグインを探す事が出来ます
https://sublime.wbond.net/

さて、これでかなり vim らしくなったと思います

キーバインド

今度はキーバインドを自分で書いてさらに vim っぽくして行きます

キーバインドに付いても Default / User の設定があります
User に設定を追加して行きます

Sublime Text > Preferences > Key Bindings - User を開きます
からのファイルが開くはずです

f:id:norisu0313:20131207215500p:plain

gt/gT でタブを前後移動出来るようにします
    {
        "keys": ["g", "t"],
        "command": "next_view",
        "context":
        [
            { "key": "setting.is_widget", "operand": false },
            { "key": "setting.command_mode" }
        ]
    },
    {
        "keys": ["g", "T"],
        "command": "prev_view",
        "context":
        [
            { "key": "setting.is_widget", "operand": false },
            { "key": "setting.command_mode" }
        ]
    },
sp で画面の縦分割、vs で画面の横分割がされるようにします
    {
        "keys": ["s", "p"], "command": "simple_clone",
        "args":
        {
            "location": "right",
        },
        "context":
        [
            { "key": "simpleclone_keymap_enabled.right" },
            { "key": "setting.command_mode" },
        ]
    },
    {
        "keys": ["v", "s"], "command": "simple_clone",
        "args":
        {
            "location": "down",
        },
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
command + w w / command + w W で画面の前後移動を出来るようにします

command w はSublime Text 的にはファイルを閉じるショートカットになっていますが、必要ないと思うのでつぶしています
この機能なにもタブがない画面があるとバグるみたいですが、それは我慢するしかなさそうでした

    {
        "keys": ["super+w", "w"],
        "command": "focus_neighboring_group",
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
    {
        "keys": ["super+w", "W"],
        "command": "focus_neighboring_group",
        "args": {"forward": false},
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
command + r で redo 出来るようにします

command + r は Sublime Text の中でもかなりの便利コマンドで関数検索ペレットを開くに割り当てられていますが、後から別のショートカットに割り当てる事にして vim の操作に寄せています

    {
        "keys": ["super+r"],
        "command": "redo"
    },
検索ペレットをcommand+fに割り当てています

command + f はファイルない検索ですが、vimmer は / を使うだろうってことで必要ないはずで
検索=command + fは色々名ツールでデファクトかなと思ったのでこれに割り当てています
実はSublime Textデフォルトのcommand + rとは違ってファイルない検索ペレットではなくプロジェクトない検索ペレットを表示するようにしています。@で始めるとファイルないになるので、@は自分でうてばいいかなぁと思った次第です
関数検索ペレットの詳しい使い方は他のエントリー探して下さい

    {
        "keys": ["super+f"],
        "command": "show_overlay",
        "args": {"overlay": "goto"},
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
shift + i に複数行同時挿入を割り当てています。

(カーソル移動 選択) カレントワードを選択する。 すでに文字列を選択中の場合は文字列を検索して順次選択する。
という機能らしく、vimの同時挿入とはちょっと違いますが近い事が出来ます(むしろSublime Text のほうがすごい)

    {
        "keys": ["shift+i"],
        "command": "find_under_expand",
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
選択範囲を , でコメントアウトします
    {
        "keys": [","],
        "command": "toggle_comment",
        "args": { "block": false },
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
全体はこんな感じ
[
    {
        "keys": ["g", "t"],
        "command": "next_view",
        "context":
        [
            { "key": "setting.is_widget", "operand": false },
            { "key": "setting.command_mode" }
        ]
    },
    {
        "keys": ["g", "T"],
        "command": "prev_view",
        "context":
        [
            { "key": "setting.is_widget", "operand": false },
            { "key": "setting.command_mode" }
        ]
    },
    {
        "keys": ["s", "p"], "command": "simple_clone",
        "args":
        {
            "location": "right",
        },
        "context":
        [
            { "key": "simpleclone_keymap_enabled.right" },
            { "key": "setting.command_mode" },
        ]
    },
    {
        "keys": ["v", "s"], "command": "simple_clone",
        "args":
        {
            "location": "down",
        },
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
    {
        "keys": ["super+w", "w"],
        "command": "focus_neighboring_group",
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
    {
        "keys": ["super+w", "W"],
        "command": "focus_neighboring_group",
        "args": {"forward": false},
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
    {
        "keys": ["super+f"],
        "command": "show_overlay",
        "args": {"overlay": "goto"},
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
    {
        "keys": ["super+r"],
        "command": "redo"
    },
    {
        "keys": ["shift+i"],
        "command": "find_under_expand",
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
    {
        "keys": [","],
        "command": "toggle_comment",
        "args": { "block": false },
        "context":
        [
            { "key": "simpleclone_keymap_enabled.down" },
            { "key": "setting.command_mode" },
        ]
    },
]

大分 vim ぽっくなった!キーバインドも自分の前の設定にかなり近いこれなら移行できそう