Sublime Text 2で人生を簡素化

画像

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 . :



image





Diff


Diff, , Backup. :



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, , . , - .



All Articles