【问题标题】:Sublime Text 3 Key Binding - Using variablesSublime Text 3 键绑定 - 使用变量
【发布时间】:2015-01-04 05:11:29
【问题描述】:

我正在尝试使用当前 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 中实现同样的目标,但是出了点问题。

谢谢!

【问题讨论】:

    标签: keyboard-shortcuts sublimetext3 gitbox


    【解决方案1】:

    编辑:

    与此同时,我构建了一个通用插件,它使您能够通过击键或通过命令面板打开任何外部应用程序。 该插件可以在这里找到:ExternalTools

    您可以通过命令面板cmd+shift+p轻松安装它

    在您的情况下,您可以转到 Preferences / Key Bindings 并添加以下内容:

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

    我仍然没有 Mac,所以它有可能无法正常工作。在这种情况下,如果您能给我反馈,我会很高兴(请参阅Issues)。


    原答案:

    我花了几个小时搜索同样的问题。毕竟我决定用我自己的占位符创建一个小插件。

    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"]}}
    

    这可能不是最好的解决方案,但它对我有用。

    【讨论】:

    • 我忘了说,我正在使用 Windows 机器。所以我不确定这个插件是否适用于mac。
    • 这个有什么更新吗?我有同样的问题,它在mac上有效吗?
    • 抱歉,我还没有 Mac。据我所知,即使是最新的开发版本也不包含这样的功能。
    【解决方案2】:

    还花了几个小时在这里搜索 - 感谢 fboers 示例,我终于可以 自己创建一个插件。

    这是我的解决方案:exec2 - 将所有 sublime-variables 扩展为应有的状态,然后将其转发给 exec。 p>

    另存为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}"]}  },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2022-01-10
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      相关资源
      最近更新 更多