LoginSignup
23
23

More than 5 years have passed since last update.

Sublime Text 2 のプラグイン (コマンド) をつくる

Last updated at Posted at 2012-09-09

概要

  • Python で書く必要がある
  • 実体は sublime_plugin.TextCommand のサブクラスで、このクラス 1 つが 1 コマンドに対応
  • 実行時はこのクラスのインスタンスが作られ run メソッドが呼ばれるので、処理をここに書く
  • コマンド名はクラス名から Command をのぞき snake case にしたもの、FooBarCommand なら foo_bar になる
  • Command Palette に表示する方法は後述
  • Snippet はまた全然別の仕組み

作り方

[Tools]-[New Plugin...] とするとひな形ができるので、Packages/User 下 (など) に保存する。拡張子は py でよい。

使い方

  1. Console を開いて ([View]-[Show Console]) view.run_command("コマンド名")
  2. キーバインドする ([Sublime Text 2]-[Preferences]-[Key Binding (User)])
  3. Command Palette から使う (後述の方法で登録して [Tools]-[Command Palette...])

ドキュメント

ここにも書いてあるけど、Packages/Default 内にサンプルがいくつかある。

イディオム

self.view に対して処理することが多い。

# 開いてる view を取得
self.view

# OK / キャンセルダイアログ
if not sublime.ok_cancel_diag(u'処理を続行しますか?')
  return

# 開いてるファイルのパスを取得
self.view.file_name()

# 開いてるプロジェクトのパスを取得
self.view.window().folders()[0]

# ファイルを開く
self.view.window().open_file("foo.rb")

# ファイルの内容をすべて取得
region_all = sublime.Region(0, self.view.size())
self.view.substr(region_all)

# ファイルの内容をすべて置き換え
self.view.replace(edit, region_all, "bar")

# ファイルの存在チェックとかは普通に Python のライブラリを呼べば良い
import os
os.path.exists("foo.rb")

# シェルなんかも Python のライブラリで
# rbenv で ruby 呼ぶ場合、環境変数渡すかフルパスにしないといけない
import subprocess
subprocess.Popen(["ruby", "-v"], stdout = subprocess.PIPE).communicate()[0]

Command Palette に表示する

コマンドを作っただけでは、Command Palette には表示されない (run_command やキーバインドで使うことはできる)。

下記の様なファイルを Packages/User/User.sublime-commands という名前 (拡張子重要) で保存すれば、Command Palette に表示されるようになる。

[
  // caption は Command Palette に表示される文字列
  // command はコマンド名
  { "caption": "Foo Bar", "command": "foo_bar" },
  { "caption": "Baz", "command": "baz" }
]
23
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
23