Sublime Text 2实时多用户编辑检测

时间:2013-08-29 16:57:53

标签: python sublimetext2 liveedit

我和我的伙伴一直在使用Sublime Text 2作为编辑器开展网站项目。我们在本地托管所有内容,我们喜欢Sublime,但有时当我们都试图编辑同一个文件时,或者当我们都打开文件但没有意识到我们不是唯一的文件时,事情变得纠结

因此,我尝试在编辑时提出保存文件的内容,然后重新加载所有打开的标签,以便您可以看到同事对其所做的更改。理想情况下,它不会中断工作流程,但会突出显示已编辑的选项卡。

这些文件都是本地托管的,所以我们确实在不同的机器上更改了不重复的相同文件。

我不知道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文件),但现在下一步是将此更改推送到打开的文件,这样如果我们其中一个人编辑它,另一个将看到更改(如果我们没有关注它,它会突出显示标签,就像我们编辑然后移动视图而不保存一样)。

我可以想到两种方法,一种是在间隔上运行命令来检查文件更改并重新加载文件的内容。另一种方法是以某种方式检测文件何时被更改并重新加载文件。

我尝试了第一个选项,但它只是崩溃了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社区就会喜欢它。

谢谢!

1 个答案:

答案 0 :(得分:0)

作为完全不同的解决方案,为什么不使用像Git这样的版本控制系统?通过Git plugins提供了许多Package Control,至少应该允许您检出文件,修改文件,然后重新检入文件,以及解决各种问题(也许是冲突的)编辑。所有这些(通常很容易)通过命令行完成。 Git包含两个基本的GUI,git-guigitk,如果你不喜欢它们,你可以find more

如果您不介意将您的网站公开,或者您愿意为私人存储库付费,那么GitHub就是您要去的地方。所有git命令行选项和GUI都可以使用它(您只需在本地克隆一份repo副本),并且可以让其他人担心设置和维护服务器。