возвышенный плагин - получить регион или удалить слово - PullRequest
1 голос
/ 28 октября 2019

Я новичок в Sublime Plugin development.

Вот что я хочу сделать

  • Сначала напишите что-нибудь
  • Затемудалить или заменить что-то (удаление было бы лучше)

Так вот мой код:

class MyCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        print("load")
        self.view.insert(edit, 0, "test")
        self.view.replace(edit, 0, "te") #self.view.replace(edit, region, "te")

Я запускаю эту команду на оболочке:

view.run_command("my")

Теперь это дает мне ошибку.

Как я могу решить эту проблему?

Как я могу получить регион или просто удалить какое-то слово?

1 Ответ

1 голос
/ 28 октября 2019

Метод view.insert() принимает в качестве аргумента точку в документе, в которой вы хотите выполнить вставку:

Insert Help

A point буквально просто смещение (в символах) в документе;поэтому точка 0 является самой первой вещью в документе, 2 будет состоять из двух символов и так далее. Эта часть работает на вас.

Сломанная часть - это вызов view.replace(), который дает вам эту ошибку (хотя путь будет другим):

Traceback (most recent call last):
  File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 1088, in run_
    return self.run(edit)
  File "C:\Users\micro\AppData\Roaming\Sublime Text 3\Packages\User\untitled.py", line 9, in run
    self.view.replace(edit, 0, "te") #self.view.replace(edit, region, "te")
  File "C:\Program Files\Sublime Text 3\sublime.py", line 837, in replace
    sublime_api.view_replace(self.view_id, edit.edit_token, r, text)
TypeError: Region required

причина в том, что метод view.replace() заменяет часть текста вашей строкой;таким образом, вы не можете предоставить ей только одну позицию, потому что этого недостаточно:

Replace help

Ваш звонок дает point, что неожидается, и, таким образом, вы получите ошибку. Вместо этого вам нужно указать Region:

Region documentation

Класс Region переносит начало (a) и конец (* 1037)*) положение, которое ссылается на диапазон текста в буфере. Регион может быть «вперед», если b больше a, или «назад», если b меньше a. Примером этого является выделенный текст. Если курсор находится справа от выделения, он «вперед», но если курсор находится слева от выделения, он «назад».

Для региона также возможнопусто, в этом случае значения a и b совпадают. Длина такой области равна 0, потому что она не охватывает текст. Примером этого является просто курсор в вашем документе без выделения;он представляет выделение, которое начинается и заканчивается в одной и той же точке.

Вы можете построить регион, используя конструктор выше;в зависимости от того, что вы хотите сделать, вам нужно построить регион по-другому.

Например, вы можете заменить строку, указанную выше, следующим:

self.view.replace(edit, sublime.Region(0), "te")

Это говоритSublime для замены текста, начиная с позиции 0 и заканчивая позицией 0 текстом te. В этом случае это просто вставит символы в начало буфера, потому что область пуста (и, следовательно, она ничего не заменяет).

Вы также можете сделать это:

self.view.replace(edit, sublime.Region(0, 4), "te")

Теперь область охватывает символы от 0 до 4, поэтому она заменит вставленный вами test просто te (то есть похоже, что вы стерли последние два символа test.

Есливаша цель - просто удалить текст, тогда вы хотите view.erase() вместо этого:

Erase help

Как видно здесь, вы задаете метод erase в качестве регионаи он удаляет весь текст в этой области. Поэтому, если вы хотите удалить текст test, который вы добавили, вы должны сделать:

self.view.erase(edit, sublime.Region(0, 4))

Теперь результат команды такой, как будто он никогдавставил что-нибудь вообще.

...