Into the Horizon

programming, photography, and daily log

サーバー上のファイルをSublimeLinter 他

週末にsublimeと戯れたので、その結果をメモ。

サーバー上のファイルをsublimelinter

PerlのSublimeLinterについては前に記事を書きました(ちなみにinclude_dirsについて追記しました)が、サーバー上のファイルをマウントして作業とかしてると、実際に実行するperlはサーバー上のperlなので、ローカルにもサーバー上で使うモジュールと同じものがないとuseエラーが起きてしまいます。 ローカルにもサーバー上と同じ環境を作れれば問題ないのですが、まあそれも面倒ですよね。ということで、サーバー上の環境でlintをかけるようにしてみました。

やったことは単純。SublimeLinterはperl -cかけた結果をパーズしてるだけなので、そこで使うperlをサーバー上のものにすればOKです。 てことで、以下の様なラッパーを書いて、それをSublimeLinter-contrib-perlのlinterで使わせることにしました。

sshperl
#!/bin/bash
MOUNT_LOCAL1=/Users/nullnull/mnt/server1
current_path=$(pwd)
if echo $current_path | grep $MOUNT_LOCAL1; then
    # echo "mount" >&2
    ssh hoge@server1 -t "perl"
else
    # echo "not mount" >&2
    perl
fi
Packages/SublimeLinter-contrib-perl/linter.py
   # executable = 'perl'
    executable = 'sshperl'

はじめてのPlugin開発

SublimeTextのプラグイン作成方法 | 情報基盤システム学研究室 こちらを参考にちょっと作ってみました。こちらのサイトでも書かれてますが、チュートリアル見れば即作れます。こんなに簡単ならもっとはやくやればよかった。笑

とりあえず Tools > New Plugin でひな形が作れるのでぜひ試してみてください。

自分が作ったプラグインは以下。会社でfpとspの2つのテンプレートを開発していて、fpとspをサクっと切り替えたかったので作ってみました。 完全に個人用なので別に公開はしませんw

switch_fp_sp.py
import sublime, sublime_plugin

class SwitchFpSpCommand(sublime_plugin.WindowCommand):
    def run(self, type):
        view = self.window.active_view()
        file_name = view.file_name()
        if (type == "sp") : open_file_name = file_name.replace("/fp/", "/sp/")
        else : open_file_name = file_name.replace("/sp/", "/fp/")
        self.window.open_file(open_file_name)
Default.sublime-commands
[
    {
        "caption": "SwitchSpFp: toSP",
        "command": "switch_fp_sp",
        "args" : {
            "type": "sp"
        }
    },
    {
        "caption": "SwitchSpFp: toFP",
        "command": "switch_fp_sp",
        "args" : {
            "type": "fp"
        }
    }
]

作成時間5分くらいw

あとはConvertToUTF8のバグにプルリク送ったりしてました。 さぶらいむレベルが4くらいにはなったかな…