Открыть файл по определенному номеру строки с помощью команды «open_file» - PullRequest
0 голосов
/ 15 июня 2019

Мой вопрос похож на тему на форуме SublimeHQ.

Я добавил несколько записей в мой 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 для извлечения строки / столбца из имени файла, возможно, это то же самое.

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

Но это также не удалось.

In sublime.py

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

В api_reference

open_file(file_name, <flags>)

Но в ключе args мы используем file, а не file_name & fname.

Где это указано?

Как это сделать, не создавая новый плагин?

1 Ответ

2 голосов
/ 16 июня 2019

Команда open_file действительно не обрабатывает имена файлов с закодированной позицией в конце.Эта конкретная команда реализована в ядре, а не в плагине, что означает, что невозможно проанализировать ее аргументы, и она также не генерирует никаких ошибок, если вы пытаетесь вызвать ее с неверными аргументами.Таким образом, невозможно определить, существует ли какой-либо способ вызвать его таким образом, чтобы использовать закодированную информацию о положении, за исключением ручной попытки аргументов и значений, чтобы посмотреть, что они делают, или попросить разработчиков предоставить такую ​​информацию (или добавить ее, если этоне там).

Справочник по API для реальных плагинов;он не связан каким-либо прямым образом с командами, которые могут существовать с таким же именем.Аргументы, которые вы видите в фактическом определении API, обычно отличаются от того, что задокументировано.

Одной из причин этого является то, что методы API, как правило, являются методами класса, что означает, что они принимают подразумеваемый аргумент self, когда вы объявляете их, которые не нужны при вызове.Кроме того, часто аргументы имеют другое задокументированное имя из-за ясности, исторических причин и так далее.Примером этого является вышеуказанная разница между file_name и fname;если вы не вызываете метод с аргументами ключевого слова, это различие не имеет значения.

Иногда существуют также аргументы к методам API, которые не документированы, что может быть по любой причине.Примером этого может служить приведенный выше аргумент group, который определяет, в какой файловой группе открывается файл;API разрешает это, но если вы не посмотрите на соответствующий файл, вы не сможете использовать его.

Это долгий способ сказать, что, насколько я знаю, естьнет способа обойти необходимость использовать плагин для этого.Один из сообщений на форуме, на который вы ссылаетесь, является одним из примеров этого;пример, который может быть несколько проще:

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 к имени файла, которое вы предоставляете.Это немного отличается от плагина, связанного выше, в том, что для определения позиции требуются явные аргументы row и col.

На практике один над другим все сводится к тому, как вы хотите указать позициюинформация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...