如何强制在 Sublime Text 2 的左窗格/列中打开新文件?

如何强制在 Sublime Text 2 的左窗格/列中打开新文件?

我在 Windows 7 上使用 Sublime Text 2,我已将其配置为使用 2 列进行拆分编辑(在菜单中:视图 > 布局 > 列:2),所以现在我有 2 个窗格。当我通过 Total Commander F4 Edit 或 Explorer 的上下文菜单“使用 Sublime Text 2 打开”打开新文件时,新文件将在当前活动窗格中打开,当左窗格处于活动状态时这不是问题,但当右窗格处于活动状态时,它会在右窗格中打开它,这是我不想要的行为。是否可以始终在左窗格中打开新文件进行编辑?如果可以,我该怎么做?

查雷克。

答案1

Sublime Text 2 中没有原生方法可以执行此操作。您想要的是能够切换到左侧窗口组(组 0),打开一个文件,然后(可能,从您的问题中不清楚)切换回右侧窗口组(组 1)。

这可以通过一系列Sublime Text 命令。具体来说是move_to_group,prompt_open_file,move_to_group。

不幸的是,Sublime 的原生命令、宏功能仅适用于文本操作命令,而不适用于窗口命令。而且键绑定只接受单个命令。所以你有两个选择

无插件选项

只需在按 Ctrl+O 之前输入 Ctrl+1。这是一种切换到左侧窗口组并打开文件的相当快捷的方法。然后,如果需要,您可以使用 Ctrl+2 切换回来。

完整(更复杂)的解决方案

您可以安装在 Sublime 论坛上找到的插件代码创建“运行多个命令”命令。然后,您可以根据需要创建键绑定。我猜您可能希望它只是覆盖默认的打开选项,因此让我们将其绑定到 Ctrl+O

{ "keys": ["ctrl+o"],
    "command": "run_multiple_commands",
    "args": {
         "commands": [
            {"command": "move_to_group", "args": {"group": 0 }, "context": "window"},
            {"command": "prompt_open_file", "context": "window"},
            {"command": "move_to_group", "args": {"group": 1 }, "context": "window"}
          ]}}

从下面的链接安装插件后,它就会起作用。要安装它,您只需将其作为 .py 文件安装在 %APPDATA%\Sublime Text 2\Packages\User 文件夹中即可。

# run_multiple_commands.py
import sublime, sublime_plugin

# Takes an array of commands (same as those you'd provide to a key binding) with
# an optional context (defaults to view commands) & runs each command in order.
# Valid contexts are 'text', 'window', and 'app' for running a TextCommand,
# WindowCommands, or ApplicationCommand respectively.
class RunMultipleCommandsCommand(sublime_plugin.TextCommand):
  def exec_command(self, command):
    if not 'command' in command:
      raise Exception('No command name provided.')

    args = None
    if 'args' in command:
      args = command['args']

    # default context is the view since it's easiest to get the other contexts
    # from the view
    context = self.view
    if 'context' in command:
      context_name = command['context']
      if context_name == 'window':
        context = context.window()
      elif context_name == 'app':
        context = sublime
      elif context_name == 'text':
        pass
      else:
        raise Exception('Invalid command context "'+context_name+'".')

    # skip args if not needed
    if args is None:
      context.run_command(command['command'])
    else:
      context.run_command(command['command'], args)

  def run(self, edit, commands = None):
    if commands is None:
      return # not an error
    for command in commands:
      self.exec_command(command)

相关内容