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