3

現在の Sublime Text 3 $project_path フォルダーでお気に入りの git アプリケーションを開くためのキー バインディングを作成しようとしていますが、どういうわけか Sublime Text 3 は変数を実際のパスに変換しません。

以下に、現在のキーボード バインディング ファイルを示します。

[
    {
        "keys": ["super+ctrl+alt+g"],
        "command": "exec",
        "args":
        {
            "shell_cmd": "open -a Gitbox $project_path"
        }
    }
]

$project_path は実際のプロジェクト パスに変換されません...何が間違っていますか? 代わりに「ビルド システム」を使用する必要がありますか? ビルド システムを調べましたが、ファイルのスコープ (*.rb など) を選択する必要があり、このキーボード ショートカットをすべてのプロジェクト/ファイルで有効にしたいという問題がありました。

textmate2 では、バンドル エディタで新しい「コマンド」を作成し、それにショートカットを割り当てることで、同じショートカットを簡単に実現できました。コマンドは次のようになります。

#!/usr/bin/ruby
exec "open -a Gitbox '#{ENV['TM_PROJECT_DIRECTORY']}'"

だから私はSublime Text 3でこれと同じことを達成しようとしていますが、何かがうまくいかない.

ありがとう!

4

2 に答える 2

2

編集:

それまでの間、キー ストロークまたはコマンド パレットを介して任意の外部アプリケーションを開く機能を提供する汎用プラグインを作成しました。プラグインはここにあります: ExternalTools

コマンドパレットから簡単にインストールできますcmd+shift+p

あなたの場合、Preferences / Key Bindingsに移動して、以下を追加できます。

{ 
    "keys": ["super+ctrl+alt+g"], 
    "command": "external_tools_run", 
    "args": { "cmd": ["open", "-a", "Gitbox", "$project_path"] }
} 

私はまだMacを所有していないので、正しく動作しない可能性があります。この場合、フィードバックをいただければ幸いです (「問題」を参照)。


元の回答:

同じ問題を検索するのに数時間を費やしました。結局、私は独自のプレースホルダーを持つ小さなプラグインを作成することにしました。

import sublime, sublime_plugin

class RunAppCommand(sublime_plugin.WindowCommand):
    def run(self, app_args):
        app_args = self.fill_placeholder(app_args)
        self.window.run_command("exec", {"cmd": app_args } )        

def fill_placeholder(self, args):
    res = []
    proj_folder = self.get_project_folder()

    for arg in args:
        arg = arg.replace("$PROJECT_FOLDER", proj_folder)
        res.append(arg)

    return res

def get_project_folder(self,default=None):
    proj_folder = ""

    if self.window.project_file_name():
        proj = self.window.project_data()

    proj_folder_obj = self.get_first(proj["folders"])
    if proj_folder_obj:
        proj_folder = proj_folder_obj["path"]

    elif self.window.folders():
        proj_folder = self.get_first(self.window.folders())

    if not proj_folder:
        sublime.status_message("No project folder located")
        return default

    return proj_folder        

def get_first(self, iterable, default=None):
    if iterable:
        for item in iterable:
        return item
    return default

上記のコードを Packages/User/RunApp.py に保存したら、以下を Default.sublime-keymap に追加するだけでコマンドを機能させることができます:

{ "keys": ["super+ctrl+alt+g"], "command": "run_app", "args": { "app_args": ["open", "-a", "Gitbox", "$PROJECT_FOLDER"]}}

これは最善の解決策ではないかもしれませんが、私にとってはうまくいきます。

于 2015-07-06T09:13:51.670 に答える
0

また、ここで検索するのに数時間費やしました-fboersの例のおかげで、最終的に自分でプラグインを作成できました。

だからここに私の解決策があります: exec2 -すべての崇高な変数を本来あるべきように展開し、それをexecに転送します。

これを として保存しますPackages/Exec2/Exec2.py

import sublime
import sublime_plugin

class Exec2Command(sublime_plugin.WindowCommand):
    def run(self, cmd):
        new_cmd = [sublime.expand_variables (value, self.window.extract_variables()) for value in cmd]
        self.window.run_command("exec", {"cmd": new_cmd } )     

キーバインドの例:

{ "keys": ["ctrl+F7"], "command": "exec2", "args" : { "cmd": ["V:/v4_tools/v4Doccer.exe", "--mdi", "${file}"]}  },
于 2017-02-08T10:11:22.957 に答える