-->

招行与SublimeText下一节(Move line to next section with S

2019-10-28 14:22发布

我正在寻找一种方式来一条线移动到“下一个章节” SublimeText。 这可能是在“下一段落”如果是文本(见下文),在“下一个节点”,如果它是XML,在“下一个代码块”,如果它的代码,等等。

目前我使用CTRL SHIFT 向下箭头很多次把它移动到下一个部分,但我认为SublimeText可能有此功能外的开箱。

主要用例的实施例:

&section1
abcdef
ghijkl    <--- if the cursor is in this line, pressing CTRL+DOWN would move this line...
sqfdsdfqsdfjq

&section2         <--- ...here!  just between "&section2" and "Lorem".
Lorem ipsum dolor sit amet

&somethingelse    <--- one more CTRL+DOWN would move it here
tempor incididunt ut labore et dolore magna aliqua
t enim ad minim veniam
quis nostrud exercitation

Answer 1:

我终于写一个插件这样的:

# Put this file in "C:\Users\User\AppData\Roaming\Sublime Text 2\Packages\User\"
# Add this to "C:\Users\User\AppData\Roaming\Sublime Text 2\Packages\User\Default (Windows).sublime-keymap": 
#     { "keys": ["ctrl+up"], "command": "movesection", "args": {"direction": "up"}},
#     { "keys": ["ctrl+down"], "command": "movesection", "args": {"direction": "down"}}

import sublime, sublime_plugin
import subprocess

class MovesectionCommand(sublime_plugin.TextCommand):
    def run(self, edit, direction):
        # select current line, save it and delete it
        currentcursor = self.view.sel()[0].begin()
        thisline = self.view.substr(self.view.full_line(currentcursor))
        self.view.erase(edit, self.view.full_line(currentcursor))

        # find the next/previous & and move there
        if direction == 'down':
            beg = self.view.sel()[0].begin()
            end = self.view.size()
        else:
            beg = 0
            end = self.view.sel()[0].begin()
        contents = self.view.substr(sublime.Region(beg, end))  # https://stackoverflow.com/questions/20182008/sublime-text-3-api-get-all-text-from-a-file            
        offset = contents.find('&') if direction == 'down' else contents.rfind('&', 0, contents.rfind('&'))  # down: first occurence, up: second-to-last occurence
        cursors = self.view.sel()
        cursors.clear()
        location = sublime.Region(beg+offset, beg+offset)
        cursors.add(location)

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

        # insert the text here
        self.view.insert(edit, self.view.sel()[0].begin(), thisline)

        # move to the line currently pasted (because of inserting the line usually including \n, it would go to next line, thus the following code is needed)
        (row, col) = self.view.rowcol(self.view.sel()[0].begin())
        self.view.run_command("goto_line", {"line": row})


文章来源: Move line to next section with SublimeText