web-dev-qa-db-ja.com

崇高なテキスト2でキーバインディングコマンドをチェーンすることは可能ですか?

Sublime Textで、サイドバーに現在のファイルを表示し、フォルダー構造内を移動したい場合があります。

これは、コマンドreveal_in_side_barfocus_side_barを使用して実現できますが、2つの別々のキーの組み合わせにバインドする必要があるため、理想的には1つだけ(私は怠け者)。

複数のコマンドを単一のキーの組み合わせにバインドする方法はありますか?例えばこのようなもの:

{
  "keys": ["alt+shift+l"], 
  "commands": ["reveal_in_side_bar", "focus_side_bar"]
},

解決

@ artem-ivanykと@d_railの回答に基づく

1)ツール→新しいプラグイン

import sublime, sublime_plugin

class RevealInSideBarAndFocusCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.window.run_command("reveal_in_side_bar")
        self.window.run_command("focus_side_bar")

RevealInSideBarAndFocus.pyとして保存

2)Sublime Text 2→Preferences→Key Bindings — User

それをショートカットにバインドします。

{ "keys": ["alt+shift+l"], "command": "reveal_in_side_bar_and_focus" }
48

@Artem Ivanykの回答を更新しています。 Sublimeの変更点はわかりませんが、その解決策はうまくいきませんでしたが、これでうまくいきました。

import sublime, sublime_plugin

class RevealInSideBarAndFocusCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.window.run_command("reveal_in_side_bar")
        self.window.run_command("focus_side_bar")

{ "keys": ["ctrl+shift+8"], "command": "reveal_in_side_bar_and_focus" }

ところで、私はビルド2220を使用しています

30
d_rail

質問は1年前のものですが、これはまだ答えを探している人々を助けるかもしれません。

最近、Chain of commandと呼ばれる新しいパッケージがjisaacksによって開発されました。これは、複数のコマンドを一度にチェーンするという、ユーザーが要求したものを正確に実行するという主要なタスクを持っています。

パッケージはここにあります: https://github.com/jisaacks/ChainOfCommand

作業の例を以下に示します。

現在のファイルを複製するためのキーバインディングが必要だとしましょう。このキーバインディングを設定できます:

{
  "keys": ["super+shift+option+d"], 
  "command": "chain", 
  "args": {
    "commands": [
      ["select_all"],
      ["copy"],
      ["new_file"],
      ["paste"],
      ["save"]
    ]
  }
}

これにより、すべてのテキストが選択され、コピーされ、新しいファイルが作成され、テキストが貼り付けられて、ファイルの保存ダイアログが開きます。

ソース: https://sublime.wbond.net/packages/Chain%20of%20Command

34
Winfried

同様の問題に遭遇しました。マクロを記録しようとしたとき、 "保存する" コマンド、コンソールは私に投げました 「不明なマクロコマンドの保存」 メッセージ。基本的なプラグインで私の方法を回避しました。

1) ツール→新しいプラグイン

_import sublime, sublime_plugin

class MyChainedActionsCommand():
    def run(self):
        self.view.run_command("reveal_in_side_bar")
        self.view.run_command("focus_side_bar")
_

クラス名にはキャメル大文字表記を使用する必要があります。 ST2は、„ Command“サフィックスを削除してコマンド名のこのクラスを公開し、残りは小文字のアンダースコア表記に変換されます。つまりこの例では、MyChainedActionsCommandをsublimeのコンソール入力で実行できます:view.run_command("my_chained_actions")

2) Sublime Text 2→Preferences→Key Bindings — User

それをショートカットにバインドします。

_{ "keys": ["alt+shift+l"], "command": "my_chained_actions" }_

コンマに注意してください。

25
Artem Ivanyk

this Gist を見てください。

私は長い間これを実装しようとしていて、これを偶然見つけました。

提供されている「ドキュメント」を必ずお読みください。 「コンテキスト」キーを渡していないことに気づくまで、私はこの作業を続けようとしました。

8
mirandacelso

これを行うマクロを作成できます。 Sublime Textの場合、マクロは基本的にチェーンされたコマンドです。次に、そのマクロのキーバインドを作成します。 Tools > Record Macroを使用してマクロを作成し、コマンドを実行することができます(マクロはキーストロークも記録するため、メニューバーからのコマンドを使用して競合を引き起こさないようにする必要があります)。次にStop Recording、次にSave Macro。マクロを保存した後、マクロをSublime Textで開いて、必要なものだけが記録されていることを確認できます。

4
BoundinCode

Artem Ivanyk の返信に基づいて、引数で動作するChainedActionsのバージョンを次に示します。 actionsargsの2つの引数を取ります。どちらもリストであり、リスト内の各コマンドは対応する引数を指定して実行されます。この明らかに愚かな例は、2つのスニペットを挿入します:view.run_command("chained_actions", {"actions":["insert_snippet","insert_snippet"],"args":[{"contents": "($ 0) "}、{"コンテンツ ":" 1($ 0) "}]})`

import sublime
import sublime_plugin

class ChainedActionsCommand(sublime_plugin.TextCommand):
    def run(self, edit, actions, args):
        for i, action in enumerate(actions):
            self.view.run_command(action, args[i])
1
user2503795

同じコマンドを使用しようとしましたが、ファイルのフォルダーが既に展開されているとき、崇高にフォーカスサイドバーの上部に移動し、開いているファイルが表示されるというバグが発生しました。この動作を改善するために、私が期待どおりに動作することを保証する新しいプラグインを作成しました。これは https://github.com/miguelgraz/FocusFileOnSidebar です。

1
Miguelgraz

Sublime text3 build-3083を使用しています。「サイドバーで表示する」だけで問題が解決され、自動的にフォーカスが移動します。

Preferences-> Key Bindings-Userの下に次のステートメントを追加して、「サイドバーで表示」のカスタムキーボードショートカットを追加しました。

[
    { "keys": ["ctrl+shift+r"], "command": "reveal_in_side_bar"}
]

imageファイルタイプのオプション-[サイドバーで表示]がありませんでした。コンテキストメニューがマウスの右クリックで表示されないためです。この状況では、カスタムキーボードショートカットが便利です。

1
Sudheesh.M.S