使用“open_file”命令打开特定行号的文件

Open file at specific line number using “open_file” command

我的问题与SublimeHQ论坛中的thread类似

我在 Default.sublime-commands 文件中添加了一些条目来打开文件,例如

{ "caption": "File Open: File Name", 
  "command": "open_file",
  "args": {"file": "/path/to/file.ext"} },

它们工作正常,但我希望其中之一在特定行号处打开,但找不到正确的符号。

这不会打开第 123 行的文件,而是打开文件路径:/path/to/file.ext:123.

{ "caption": "File Open: File Name", 
  "command": "open_file",
  "args": {"file": "/path/to/file.ext:123"} },

他们建议:

尝试将 “flags” : 1 添加到参数列表中。 API open_file 需要有标志 ENCODED_POSITION 才能从文件名中提取 line/column,也许是一样的。

{ "caption": "File Open: File Name", 
  "command": "open_file",
  "args": {"file": "/path/to/file.ext:123", "flags":1} },

但这也失败了。

sublime.py

def open_file(self, fname, flags=0, group=-1):

api_reference

open_file(file_name, <flags>)

但是在 args 键中我们使用 file 而不是 file_name & fname .

哪里写的?

如何在不创建新插件的情况下执行此操作?

open_file 命令确实不处理文件名末尾带有编码位置的文件名。该特定命令是在核心中而不是在插件中实现的,这意味着不可能内省它的参数,并且如果您尝试使用不正确的参数调用它也不会产生任何类型的错误。因此,无法确定是否有某种方法可以使用编码的位置信息来调用它,而不是手动尝试参数和值来查看它们的作用或要求开发人员提供此类信息(或者如果它是,则添加它)不存在)。

API参考是针对实际插件的;它不会以任何直接方式与可能碰巧以相同名称存在的任何命令相关联。您在实际 API 定义中看到的参数通常与记录的不同。

其中一个原因是 API 方法通常是 class 方法,这意味着它们在您声明它们时采用隐含的 self 参数,而在您调用它们时不需要。此外,由于清晰度、历史原因等原因,参数通常具有与实际名称不同的文档名称。一个例子就是上述 file_namefname 之间的区别;除非您使用关键字参数调用该方法,否则这种差异无关紧要。

有时 API 方法的参数未记录在案,这可能出于多种原因。一个例子就是上面的 group 参数,它决定文件在哪个文件组中打开; API 允许它,但除非您查看相应的文件,否则您不知道可以使用它。

这是一个冗长的说法,据我所知,没有办法绕过必须为此使用插件。您链接的论坛 post 中的那个就是一个例子;一个更简单的例子是:

import sublime
import sublime_plugin


class OpenFileEncodedCommand(sublime_plugin.WindowCommand):
    def run(self, file):
        self.window.open_file(file, sublime.ENCODED_POSITION)

这实现了一个 open_file_encoded 命令,允许您将 :row:row:col 添加到您提供的文件名中。这与上面链接的插件略有不同,因为它需要明确的 rowcol 参数来指定位置。

实际上,一个比另一个完全取决于您要如何指定位置信息。