Sublime Text 2を最近発見したので、どうすればこのような効果的なツールを思い付くことができるのかと思いました。 あらゆる種類のIDEに甘やかされている人は、コードの美しいハイライトを除いて、通常は何の利点も見ません(ただし、これは当初私を惹きつけました)。
このエディターの素晴らしさについては説明せず、すべての機能をペイントします-このトピックにはすでに多くのトピックがあります 開発者が望んでいる59ドルは残念ではありません。
プラグイン
私にとって、他のエディターやIDE動物園に対するSublime Text 2の主な利点は、独自のプラグインを作成できることです。 たとえば、EclipseやGeany用のプラグインを作成する場合など、大量の文献を勉強する必要はありません。 プラグインはPythonで書かれており、プロジェクトのWebサイトにはAPIリファレンスがあります。これは、ニーズに合わせてエディターを拡張するのに十分でした。
また、プラグインのデバッグに使用できる便利なpythonコンソールがエディターにあるという事実も気に入っています。
ウィッシュリスト
私は本当に必要な可能性のいくつかを定式化しようとしますが、既成のソリューションは見つかりませんでした。
バックアップを作成する
私はPHPで開発し、同時に多くのプロジェクトで作業しています。 たまたま多くの理由でバージョン管理システムが定着しなかったため、バックアップを作成するための便利なメカニズムが必要でした。
Sublime以前は、Geanyを使用していましたが、かなり便利なアドインがあり、選択したディレクトリで編集可能なファイルのバックアップコピーを作成できました。 このアドインの唯一のマイナス点は、保存するたびにバックアップが作成されることです。 Sublimeでも似たようなものが必要でしたが、バックアップはオンデマンドで作成されます(ホットキーを押すなど)。 公平に言うと、既製のソリューションの中に同様のプラグインAutomaticBackupsがありますが、私たちはバイクを作成します。 楽しみのために。
ファイル比較
複数のプロジェクトで作業しているときは、別のプログラマーによって行われた変更を確認する必要がある場合があります(または、ftpとファイルをローカルコピーと比較します)。 通常、この場合、 meldを開き、必要なファイルを選択して、違いを確認しました。 この機能をエディターに任せたいと思います。 私はこのように想像しました:エディターで2つのファイルを開き、タブを次々に配置し、ホットキーを押すと、選択したファイルとエディターのタブが次に移動するファイルでmeldが開きます。 とても便利に思えました。
開いているすべてのファイルのリスト
作業の詳細から、編集済みファイルのリストを作成する必要がよくあります(はい、ここではsvnのない生活です)。 ホットキーを押しても開いているファイルのリストを受け取りたいです。
仕事に行こう
Sublimeへの快適な移行に必要な最小限の機能について説明しました。
次に、自分のニーズに合わせてプラグインがどのように作成されたか、そしてそれがどれほど簡単かを示します。 Ubuntuの下ですべてを書いたので、Windowsでそれがどのように行われるか想像もできません。
バックアッププラグイン
始めましょう。 エディターを開き、メニューから[ツール]-> [新しいプラグイン]を選択します...フォームの空白のタブが開きます。
import sublime, sublime_plugin
class ExampleCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.insert(edit, 0, "Hello, World!")
. , , . Command. , _
~/.config/sublime-text-2/Packages/User/ backup.py:
import sublime, sublime_plugin
class BackupCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.insert(edit, 0, "Hello, World!")
:
- , ;
- ( );
- ( );
- ;
- , .
— . sublime. sublime active_window — , . views — . , view, :
sublime.active_window().active_view()
view file_name(), . - . Preferences->Key Bindings — User backup F7:
[
{ "keys": ["f7"], "command": "backup" }
]
:
import sublime, sublime_plugin
class BuckupCommand(sublime_plugin.TextCommand):
def run(self, edit):
print sublime.active_window().active_view().file_name()
, Python (ctrl+`) F7. .
API — .
sublime.status_message('')
API :
# -*- coding: utf-8 -*-
import sublime, sublime_plugin
import os, time, shutil, sys
# UnicodeDecodeError
sys.setdefaultencoding('utf-8')
# ,
backup_dir = "/home/deadlink/backup/"
class BackupCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.create(sublime.active_window().active_view().file_name())
def create(self, filename):
#
now = time.localtime()
# ___
prefix = str(now.tm_hour)+"_"+str(now.tm_min)+"_"+str(now.tm_sec)+"_"
# __
stamp = str(now.tm_year)+"_"+str(now.tm_mon)+"_"+str(now .tm_mday)
# / / / /
full_path = backup_dir+stamp+os.path.dirname(filename)
# ,
if not os.path.isdir(full_path):
os.makedirs(full_path) # ,
#
shutil.copyfile(filename, full_path+"/"+prefix+os.path.basename(filename))
#
sublime.status_message(" " + filename + " !")
, ~/backup/, , SideBar ( View->SideBar->show). File->OpenFolder backup. . F7 . :
Diff
Diff, , Backup. :
- ;
- ;
- ;
- meld ;
view, . , :
sublime.active_window().views()
, . view id. , view . :
# -*- coding: utf-8 -*-
import sublime, sublime_plugin
import subprocess
class DiffCommand(sublime_plugin.TextCommand):
def run(self, edit):
cur = num = 0
# view
views = sublime.active_window().views()
# view , id
for view in views:
if view.id() == sublime.active_window().active_view().id():
# id , view
cur = num
num += 1
# view
if num-1 != cur:
# meld
subprocess.Popen([
'meld',
views[cur].file_name(),
views[cur+1].file_name()
])
meld. Ubuntu, :
sudo apt-get install meld
diff - . Preferences->Key Bindings — User F2:
[
{ "keys": ["f7"], "command": "backup" },
{ "keys": ["f2"], "command": "diff" }
]
, F2. meld, . !
. , , :
import sublime, sublime_plugin
class OpenedFilesCommand(sublime_plugin.TextCommand):
def run(self, edit):
# view
views = sublime.active_window().views()
files = ""
# view files
for view in views:
files += view.file_name()+"\n"
#
sublime.active_window().new_file()
#
sublime.active_window().active_view().insert(edit, 0, files)
, ctrl+shift+f:
[
{ "keys": ["f7"], "command": "backup" },
{ "keys": ["f2"], "command": "diff" },
{ "keys": ["ctrl+shift+f"], "command": "opened_files" }
]
, .
, Sublime Text 2. - , .
Python, , . , - .