Sublime TextをPython開発に使いやすいようにカスタマイズ

記事タイトルとURLをコピーする

こんにちは、技術一課でOJT中の鎌田です。先週、国際航空宇宙展に行ってきました。
水曜から金曜までは関係者限定で、土曜からは一般公開されたのですが、対ミサイル防衛装置にかなりの人だかりができていました。

さて、私は普段、メモを取るにも簡単なシェルスクリプトを書くにもMacでテキストエディターの[Sublime Text]を利用していますが、10月よりOJTで技術一課配属となり、Pythonやdjangoを利用して社内の書籍管理システムを構築することになりました。
この機会に、Sublime TextをPython開発に使いやすいように、カスタマイズしてみました。

package control

package controlとは[Sublime Text]に様々なプラグインを追加することができる機能です。
package controlを追加しておくことで必要なプラグインを簡単にinstallできるようになります。

package controlのinstall方法・使い方

https://packagecontrol.io/installation
からinstallコードを取得し、[Sublime Text]下部のコンソールにペーストしてエンターを押すとinstallされます。
以後cmd+shift+pでpackage controlを起動できるようになります。
packageの導入は、 package controlを開き、Install packageを選択後、欲しいpackageを検索して選択、エンターを押すとinstallが行われます。 sublime-install-package

installしておくと便利なpackage

[Python Flake8 Lint]
PEP8やPyFlakesが入っているのでPEP8というPythonのコーディング規約に沿っているか、論理的に間違いがないか、Pythonコードのチェックをしてくれます。
問題があれば、ガーターライン(左端の部分)で警告を出してくれるので、間違いに気づきやすいです。 sublime-eat-banana
[Git]
Gitコマンドを[Sublime Text]上で一通り行えるようになります。
[PEP8 AutoFormat]
.pyファイルの保存時に自動的にPEP8に沿うように修正してくれます。
とはいえ、Linterに指摘される無駄なスペースを見逃すこともあるので、このプラグインはあくまで補助的なものだと思った方が良さそうです。
[ConvertToUTF8]
Sublime TextではUTF-8以外は文字化けしてしまうことがあるのでUTF-8に自動変換するプラグインを入れておきます。(Pythonでも、UTF-8もしくはASCIIが推奨されています)
[All Autocomplete]
Sublime Textのコード補完機能を、さらに強化してくれます。
[AutoFileName]
プロジェクトフォルダ内のファイル名を補完してくれます。
imageファイルは画像幅も表示してくれます。
screen-shot-2016-10-16-at-16-21-48[SublimeREPL]
[Sublime Text]内のタブがterminalのように使えるようになります。
個人的にはこれがイチオシです。shellを起動すれば、terminalいらずです。
ちなみにREPLとはRead-Eval-Print-Loopの略で対話型実行環境のことを指します。
screen-shot-2016-10-16-at-16-02-13[SublimeFiles]
コマンドでファイル操作を行えるようになります。
macのデフォルトでは、cmd + ctl + n で起動します。
ファイル移動にマウス操作が必要なくなるので、便利です。

vim likeな操作ができるようにカスタマイズ

vimとは、linuxなどに標準で入っていることが多い高機能なテキストエディタです。
操作が特殊なものの、カーソル移動などがキーボードで完結するので慣れれば通常よりも高速に作業が行えます。
このvimの特殊な操作を[Sublime Text]でも設定を変えれば簡単に再現することができます。
そのためにはメニューバーより[Preferences] > [Settings]を選択し以下を記入します。 sublime-open-preference

// デフォルトでは[vintage]が指定されていますが削除します
"ignored_packages": [],
// vim のキーバインドを使用
"vintage_ctrl_keys": true,
// 新規ファイルを開いたらノーマルモード
"vintage_start_in_command_mode": true,
// ヤンクバッファとクリップボードを同期
"vintage_use_clipboard": true,

次に、[Preferences] > [Key Bindings]を選択し以下をペーストします。

// タブの切り替え
{ "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": ["ctrl+j"], "command": "exit_insert_mode",
                 "context":
                 [
                     { "key": "setting.command_mode", "operand": false },
                     { "key": "setting.is_widget", "operand": false }
                 ]
             },
             { "keys": ["j","j"], "command": "exit_insert_mode",
                 "context":
                 [
                     { "key": "setting.command_mode", "operand": false },
                     { "key": "setting.is_widget", "operand": false }
                 ]
             },
             // ビジュアルモードから抜ける
             { "keys": ["ctrl+j"], "command": "exit_visual_mode",
                 "context":
                 [
                     { "key": "setting.command_mode"},
                     { "key": "num_selections", "operand": 1},
                     { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": false }
                 ]
             }

これだけで、vimと同じように操作ができます。素晴らしいですね。

あると便利な設定集

[Sublime Text] → [Preferences]→ [Settings]もしくはcommand + ,にて各種設定画面が開けます。以下、参考までに私の設定です。

{
    "auto_indent": false,
    "color_scheme": "Packages/User/Cobalt (SL) (Flake8Lint).tmTheme",
    "detect_indentation": false,
//タブの空白は横線を、スペースは点を表示
    "draw_white_space": "all",
    "font_size": 15,
//カーソルのある行をハイライト
    "highlight_line": true,
//変更されたファイルのタブがハイライト。私の環境では、変更を加えるとタブ名がオレンジに。
    "highlight_modified_tabs": true,
//未保存のファイルがあっても確認せずに閉じる。次回起動時に編集内容がロールバック
    "hot_exit": true,
    "ignored_packages":
    [
    ],
//ルーラーを表示して80文字に達しているかどうか目視でチェックできるようにする
    "rulers":
    [
        80
    ],
//編集中のファイルの改行コードを表示
    "show_encoding": true,
//編集中のファイルの改行コードを表示
    "show_line_endings": true,
    "smart_indent": false,
//タブを押した際にスペースが入力される
    "translate_tabs_to_spaces": true,
//[Enter]を押した時に、空行に挿入されている無駄なインデントを取り除く
    "trim_automatic_white_space": true,
//末尾に不要なスペースが入っていると保存時に削除
    "trim_trailing_white_space_on_save": true,
//vim likeな動作をするための設定
    "vintage_ctrl_keys": true,
    "vintage_start_in_command_mode": true,
    "vintage_use_clipboard": true,
}

個人的には、タブがハイライトされる機能が好きです。手を加えたかがわかりやすいし、カッコイイ。

おまけ

terminalからsubl と打つと[Sublime Text]を開けるように

PATHが通っているディレクトリに[sublime text]のバイナリのシンボリックリンクを貼ることでできるようになります。
[Sublime Text]は末尾に2だったり3が付いている場合もあるので、うまくいかない場合はアプリケーションフォルダを確認してみてください。

sudo ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl

上記を実行後subl で起動subl titleでファイル名を指定して起動 subl .でカレントディレクトリで起動できます。

[Sublime Text]からterminalをctrl+shift+Tで開く

package controlより[terminal]をinstallするだけです。カレントディレクトリで開けます。かなり便利です。

Sublime TextからPythonを実行する

screen-shot-2016-10-16-at-17-44-55 [Tools] → [build system] → [Python]を選択しておけば、cmd + bを押すだけで実行できるようになります。

screen-shot-2016-10-16-at-17-42-01

最後に

007、面白いですよね。 ジェームズ・ボンド役ダニエル・クレイグが作中だけでなく私生活でもモテモテなのが羨ましい・・・