Метод view.insert()
принимает в качестве аргумента точку в документе, в которой вы хотите выполнить вставку:
![Insert Help](https://i.stack.imgur.com/48NJ8.png)
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](https://i.stack.imgur.com/Z63A7.png)
Ваш звонок дает point
, что неожидается, и, таким образом, вы получите ошибку. Вместо этого вам нужно указать Region
:
![Region documentation](https://i.stack.imgur.com/9M7xM.png)
Класс 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](https://i.stack.imgur.com/pj2L1.png)
Как видно здесь, вы задаете метод erase
в качестве регионаи он удаляет весь текст в этой области. Поэтому, если вы хотите удалить текст test
, который вы добавили, вы должны сделать:
self.view.erase(edit, sublime.Region(0, 4))
Теперь результат команды такой, как будто он никогдавставил что-нибудь вообще.