0

私と私の友人は、Sublime Text 2 をエディターとして使用して Web サイト プロジェクトに取り組んでいます。私たちはすべてをローカルでホストしており、Sublime を愛用していますが、2 人とも同じファイルを編集しようとしたり、2 人ともファイルを開いているが自分だけではないことに気付いていない場合に、時々問題が発生します。 .

そこで、編集時にファイルを保存し、開いているすべてのタブをリロードして、同僚がファイルに加えた変更を確認できるようにする方法を考え出しました。ワークフローを中断しないのが理想的ですが、編集されたタブが強調表示されます。

ファイルはすべてローカルでホストされているため、文字通り同じファイルを別のマシンで複製するのではなく変更しています。

私は Python を知りませんし、オブジェクト指向のコードにもあまり詳しくないので、これを達成する方法を見つけようとすると、当然ながらちょっとした問題に遭遇しました。オンラインで見つけたさまざまなもの ( http://www.sublimetext.com/docs/2/api_reference.html ) からプラグインを次のコードでつなぎ合わせました。

import sublime
import sublime_plugin
import os

class AutoSaveCommand(sublime_plugin.EventListener):
def on_modified(self, view):
    if view.file_name() != None:
        view.run_command('save')

これは成功し、ファイルが変更されるたびにファイルが保存されます。私たちは非常に高速なマシンを使用しており、編集するファイルは通常それほど大きくありません (LESS/SASS ファイル)。しかし、次のステップは、この変更を開いているファイルにプッシュすることです。変更を確認します (または、編集してから保存せずにビューを移動するときのように、タブに注目していない場合はタブが強調表示されます)。

これを行うには 2 つの方法が考えられます。1 つは、一定間隔でコマンドを実行して、ファイルの変更をチェックし、ファイルの内容を再ロードすることです。もう 1 つは、ファイルが変更されたときに何らかの方法で検出し、ファイルをリロードすることです。

最初のオプションでこれを試しましたが、Sublime がクラッシュするだけです。私は Python が苦手なだけだと思います (笑)。

import sublime
import sublime_plugin
import sched
import time

s = sched.scheduler(time.time, time.sleep)
def check_for_changes(sc): 
    sublime.view.run_command('livereload')
    sc.enter(60, 1, check_for_changes, (sc,))

s.enter(60, 1, check_for_changes, (s,))
s.run()


class LivereloadCommand(sublime_plugin.WindowCommand):
    def run(self):
        window = self.window
        current = window.active_view()
        groups = window.num_groups()
        for i in range(0, groups):
            window.focus_group(i)
            views_num = window.views_in_group(i)
            for inner_view in views_num:
                window.focus_view(inner_view)

        window.focus_view(current)

このコードを修正する方法、ファイルの変更を検出してその方法でファイルをリロードする方法、またはこの目標を達成するためのその他の方法についてのアイデアは大歓迎です。

Python を実際に知っている誰かがこれに取り組み、この種の機能を実現するプラグインを作成した場合、ST2 コミュニティに好まれると確信しています。

ありがとう!

4

1 に答える 1