3

私の以前の質問へのもう1つの深さSublime Textのこのホットキー構成が機能しないのはなぜですか? . 今、私は崇高なコマンドの実装に来ました.Sublimeが持っているコマンドをハックするのは本当に紛らわしい方法です,ブラウザを開くために使用されるコマンドを見つけるために前のスレッドでの調査として,最終的に私はの助けを借りてそれを見つけました@マットDMo。

次に、Packages/Default フォルダーに open_in_browser.py という名前のファイルが 1 つあることがわかりました。コマンドは .py ファイルのファイル名にすぎないと思いますが、実際には、コマンドに find_pre.py という名前の対応するファイルが見つかりません。 find_prev、次に open_in_browser.py を open_browsers.py としてコピーし、{ "keys": ["ctrl+b"], "command": "open_browsers"}を追加してキーマップを昇華させましたが、機能しません。すると、崇高なコマンドを実装に登録する場所があるはずだと気づいたので、そのようなメカニズムがあるとしたら、それは何ですか? どこで見つけることができますか?

4

1 に答える 1

5

TL;DR

ディレクトリに任意の名前のファイルを作成しますPackages/UserMyTestCommandメソッドのように、ファイルにクラスを作成しますrun。スネーク ケースのクラス名を使用し、Command接尾辞なしでキーマップを作成します。コマンドに何かを渡すには、名前付き引数を使用します。

完全な答え

カスタム コマンドを作成するために何かを登録する必要はありません。.pySublime Text はスクリプトのディレクトリをスキャンし、自動的に実行 (登録) するだけなので、ファイル名は重要ではありません。

これが私が使用するスクリプトの例です:

import sublime
import sublime_plugin

class ChangeViewCommand(sublime_plugin.WindowCommand):
    def run(self, reverse=False):
        window = self.window
        group, view_index = window.get_view_index(window.active_view())
        if view_index >= 0:
            views = window.views_in_group(group)
            if reverse:
                if view_index == 0:
                    view_index = len(views)

            if reverse:
                new_index = view_index - 1
            else:
                new_index = (view_index + 1) % len(views)

            window.focus_view(views[new_index])

つまり、現在のグループの次/前のタブに切り替えます (デフォルトの動作では、すべてのタブ グループが循環します)。

Packages/Userしたがって、ディレクトリに任意の名前で保存するだけです。

次に、ユーザー キーマップ ファイルにキー バインディングを作成する必要があります。

{ "keys": ["ctrl+tab"], "command": "change_view" },
{ "keys": ["ctrl+shift+tab"], "command": "change_view", "args": {"reverse": true} },

ご覧のとおり、コマンドはサフィックスsnake_caseのないクラス名です。Commandこれにより、名前付き引数を使用してクラスのrunメソッドが実行されます。

これはあなたの質問に答えていますか?エラーが発生した場合のデバッグ用 - ST コンソールを開きます (デフォルトのショートカットはctrl+です`) 。

于 2014-06-18T06:40:19.653 に答える