Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
бэкапы на гитхабеОтносительно бэкапов через vcs, BitBucket подходит лучше, чем GitHub.


# -*- coding: utf-8 -*-
import sublime, sublime_plugin
import subprocess
class DiffCommand(sublime_plugin.TextCommand):
def run(self, edit):
cur = num = 0
views = sublime.active_window().views()
for view in views:
if view.id() == sublime.active_window().active_view().id():
cur = num
num += 1
if num-1 != cur:
subprocess.Popen([
'C:\Program Files (x86)\WinMerge\WinMergeU.exe',
views[cur].file_name(),
views[cur+1].file_name()
])
* Dedicated output panel for merges. Meld uses the merge-to-center approach, which we don't think is as intuitive as ours. WinMerge doesn't support 3-way comparisons at all.
import sublime, sublime_plugin
class TrailingSpacesCleanerCommand(sublime_plugin.TextCommand):
def run(self, edit):
ws = self.view.find_all("[\t ]+$")
ws.reverse()
for r in ws:
self.view.erase(edit, r)
"trim_trailing_white_space_on_save": true
class TrimTrailingWhiteSpace(sublime_plugin.EventListener):
def on_pre_save(self, view):
if view.settings().get("trim_trailing_white_space_on_save") == True:
trailing_white_space = view.find_all("[\t ]+$")
trailing_white_space.reverse()
edit = view.begin_edit()
for r in trailing_white_space:
view.erase(edit, r)
view.end_edit(edit)import sublime, sublime_plugin
class ExampleOnSelectionModified(sublime_plugin.EventListener):
def on_selection_modified(self, view):
pass
# -*- coding: utf-8 -*-
import sublime, sublime_plugin
class ExampleOnSelectionModified(sublime_plugin.EventListener):
was_selected = False
selection = [0,0]
last_selection = [0,0]
last_line = 0
def on_selection_modified(self, view):
self.selection = [view.sel()[0].begin(), view.sel()[0].end()]
size = abs(self.selection[0] - self.selection[1])
is_selected = size != 0
# Если сейчас нет выделенного фрагмента, а до этого был - чистим его
if not is_selected and self.was_selected:
trailing_white_space = view.find_all("[\t ]+$")
trailing_white_space.reverse()
edit = view.begin_edit()
for r in trailing_white_space:
if r.begin() >= self.last_selection[0] and r.end() <= self.last_selection[1]:
view.erase(edit, r)
view.end_edit(edit)
# Если текст не выделен
elif not is_selected:
last_line = view.line(sublime.Region(self.last_selection[0], self.last_selection[1]))
line = view.line(sublime.Region(self.selection[0], self.selection[1]))
# Проверим переместили ли каретку на другую строку
if last_line != line:
edit = view.begin_edit()
r = view.find("[\t ]+$", last_line.begin())
# Если нашли пробелы, то убираем
if r:
view.erase(edit, r)
view.end_edit(edit)
self.was_selected = is_selected
self.last_selection = self.selection


# -*- coding: utf-8 -*-
import sublime, sublime_plugin
class TrimTrailingWhiteSpaceOnNewLine(sublime_plugin.EventListener):
was_selected = False
selection = [0,0]
last_selection = [0,0]
def on_selection_modified(self, view):
if view.settings().get("trim_trailing_white_space_on_new_line") == True:
self.selection = [view.sel()[0].begin(), view.sel()[0].end()]
is_selected = not view.sel()[0].empty()
edit = view.begin_edit()
# Если сейчас нет выделенного фрагмента, а до этого был - чистим его
if not is_selected and self.was_selected:
trailing_white_space = view.find_all("[\t ]+$")
trailing_white_space.reverse()
for r in trailing_white_space:
if r.begin() >= self.last_selection[0] and r.end() <= self.last_selection[1]:
view.erase(edit, r)
# Если текст не выделен
elif not is_selected:
last_line = view.line(sublime.Region(self.last_selection[0], self.last_selection[1]))
line = view.line(sublime.Region(self.selection[0], self.selection[1]))
# Проверим переместили ли каретку на другую строку
if last_line != line:
r = view.find("[\t ]+$", last_line.begin())
if r != None and r.end() < line.begin():
view.erase(edit, r)
view.end_edit(edit)
self.was_selected = is_selected
self.last_selection = self.selection
"trim_trailing_white_space_on_new_line": true
… занимаюсь разработкой на php и работаю с множеством проектов одновременно. Так уж повелось, что система контроля версий у нас по множеству причин не прижилась...
[mocksoul@XXХ ~/svn/trunk]$ svn info | grep Revision
Revision: 849836
[mocksoul@XXX ~/svn/trunk]$ find . -type f -name '*.cpp' | wc -l
14005
[mocksoul@XXX ~/svn/trunk]$ find . -type f -name '*.c' | wc -l
5073
[mocksoul@ХХХ ~/svn/trunk]$ find . -type f -name '*.py' | wc -l
13871
deadlink@deadlink-pc:~/dev/android/cyanogen_mod_racer$ find . -type f -name '*.c' | wc -l
12701
deadlink@deadlink-pc:~/dev/android/cyanogen_mod_racer$ find . -type f -name '*.cpp' | wc -l
7477
deadlink@deadlink-pc:~/dev/android/cyanogen_mod_racer$ find . -type f -name '*.java' | wc -l
17146
# -*- coding: utf-8 -*-
import sublime, sublime_plugin
class AutoEncoding(sublime_plugin.EventListener):
def on_load(self, view):
buf = view.substr(sublime.Region(0, view.size()))
print view.file_name()
try:
unicode(buf)
except Exception, e:
print 'reopen'
print view.run_command("reopen", {'encoding': 'Cyrillic (Windows 1251)'})
else:
print 'unicode'
Упрощаем себе жизнь с помощью Sublime Text 2