Ярлык для перехода к определенной части текстового файла - PullRequest
1 голос
/ 20 марта 2019

Я хотел бы создать сочетание клавиш (например, CTRL + T ), которое автоматически перемещает курсор на строку после появления фиксированного текста, например &todo.

Пример:

foo 
bar
&todo
fix bug #783
blah
blah2

Нажатие CTRL + T автоматически переместит курсор на строку, начинающуюся с fix ....

В настоящее время я делаю это так:

  • CTRL F
  • введите &todo, ENTER
  • ESCAPE (закрывает Search нижнюю панель)
  • HOME
  • СТРЕЛКА ВНИЗ (перемещается на следующую строку)

но это требует слишком много действий.

Как это сделать одним нажатием клавиши?

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Лучшее решение - использовать для этого плагин.

Плагин ниже делает то, что вам нужно. Он найдет следующее вхождение pattern (то есть маркер &todo) ниже текущей позиции курсора, переместит курсор на линию под ним и отцентрирует эту позицию в окне. Если pattern не найден ниже текущей позиции курсора, он будет искать снова в верхней части буфера, обеспечивая переход вокруг .

Скопируйте и вставьте следующий код Python в буфер и сохраните его в папке Sublime Text config User как GoToPattern.py.

import sublime
import sublime_plugin

class GotoPatternCommand(sublime_plugin.TextCommand):

    def run(self, edit, pattern):

        sels = self.view.sel()
        # Optional flags; see API.
        flags = sublime.LITERAL | sublime.IGNORECASE
        start_pos = sels[0].end() if len(sels) > 0 else 0
        find_pos = self.view.find(pattern, start_pos, flags)

        if not find_pos and start_pos > 0:
            # Begin search again at the top of the buffer; wrap around
            # feature, i.e. do not stop the search at the buffer's end.
            find_pos = self.view.find(pattern, 0, flags)

        if not find_pos:
            sublime.status_message("'{}' not found".format(pattern))
            return

        sels.clear()
        sels.add(find_pos.begin())
        self.view.show_at_center(find_pos.begin())
        row, col = self.view.rowcol(find_pos.begin())
        self.view.run_command("goto_line", {"line": row + 2})
        # Uncomment for: cursor to the end of the line.
        # self.view.run_command("move_to", {"to": "eol"})

Добавить привязки клавиш:

// The pattern arg, i.e. "&todo", can be changed to anything you want
// and other key bindings can also be added to use different patterns.
{"keys": ["???"], "command": "goto_pattern", "args": {"pattern": "&todo"}}

Добавьте запись Палитры команд в Default.sublime-commands, если хотите:

{"caption": "GoToPattern: &todo", "command": "goto_pattern", "args": {"pattern": "&todo"}},

Эти ссылки могут быть вам полезны ST v. 2 API и ST v. 3 API .

P.S. Знаете ли вы, что у Sublime Text есть закладки? [На всякий случай, если вы этого не сделали.]

0 голосов
/ 22 марта 2019

Я нашел решение: для этого сначала создайте файл gototodo.py в "C:\Users\User\AppData\Roaming\Sublime Text 2\Packages\User\", содержащий:

import sublime, sublime_plugin

class GototodoCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        contents = self.view.substr(sublime.Region(0, self.view.size()))  # https://stackoverflow.com/questions/20182008/sublime-text-3-api-get-all-text-from-a-file
        a = contents.find('&todo')
        cursors = self.view.sel()
        cursors.clear()
        location = sublime.Region(a, a)
        cursors.add(location)
        self.view.show_at_center(location)

        (row, col) = self.view.rowcol(self.view.sel()[0].begin())  # go to the next line
        self.view.run_command("goto_line", {"line": row+2})

Затем добавьте это в "C:\Users\User\AppData\Roaming\Sublime Text 2\Packages\User\Default (Windows).sublime-keymap":

{ "keys": ["ctrl+t"], "command": "gototodo" }

Готово!

...