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

Source: https://habr.com/ru/post/J148842/


All Articles