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 中,通过在 Bundle Editor 中创建一个新的“命令”并为其分配一个快捷方式,可以轻松实现相同的快捷方式。那么命令将是:

#!/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 - 将所有 sublime-variables扩展为应有的值,然后将其转发给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 回答