0

我和我的一个伙伴一直在使用 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 社区会喜欢它。

谢谢!

4

1 回答 1

0

作为一个完全不同的解决方案,为什么不使用像Git这样的版本控制系统呢?有许多Git 插件可通过Package Control获得,它们至少应允许您检出文件、修改它们并再次检入它们,以及解决不同的(可能是冲突的)编辑。所有这些也(通常很容易)通过命令行完成。Git 包括两个基本的 GUI,git-guigitk,或者如果您不喜欢它们,您可以找到更多

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

于 2013-08-29T17:27:53.610 回答