1

在此处输入图像描述是否可以在第 1 行使此标题成为每个单词或符号的项目列表,并使用键盘快捷键用空格分隔。这样我就可以选择标题,然后点击快捷方式,它将使标题成为如下项目列表:

在此处输入图像描述

尝试保存键绑定文件。

4

2 回答 2

3

没有内置任何东西,但您可以使用插件来完成。

import sublime
import sublime_plugin
import re


class SplitLineCommand(sublime_plugin.TextCommand):
    def run(self, edit, split_pattern=" "):
        view = self.view
        cursors = view.sel()
        if len(cursors) == 1:
            cursor = cursors[0]
            begin_offset = 0
            end_offset = 0
            if cursor.empty():
                region = view.line(cursor)
                content = view.substr(region)
                new_content = re.sub(split_pattern, "\n", content)

                view.replace(edit, region, new_content)
            else:
                region = cursor
                content = view.substr(region)
                new_content = ""
                if view.line(region).begin() != region.begin():
                    new_content = "\n"
                    begin_offset = 1
                new_content += re.sub(split_pattern, "\n", content)

                if view.line(region).end() != region.end():
                    new_content += "\n"
                    end_offset = - 1

            view.replace(edit, region, new_content)
            cursors.clear()
            cursors.add(sublime.Region(region.begin() + begin_offset, region.begin() + len(new_content) + end_offset))
            view.run_command("split_selection_into_lines")

然后,您可以在密钥绑定文件中添加以下内容。

[
    { "keys": ["f8"], "command": "split_line", "args": {"split_pattern": " "}}
]

当然,将密钥更改为您想要的东西。args如果您只是使用空格,则实际上不需要该参数。它默认为。为了完整起见,我只是将其包括在内。

编辑: 我已经更新了插件,因此它现在可以处理选择,尽管此时它不处理多个光标。

编辑 2 如果它不起作用,请尝试打开控制台并输入view.run_command("split_line"). 这将在切换到控制台之前在您所在的任何视图中运行命令。这样你就知道命令是否真的有效。如果没有,则说明插件有问题。如果是这样,则键绑定存在问题。

于 2013-04-05T18:48:08.397 回答
0

我修改了上面的代码供我自己使用,所以它现在尊重空格。但我硬编码制表符而不是空格,所以如果你使用空格,你可能需要进一步改变它。它现在还假设您没有选择文本,而是将光标放在要更改为垂直间距的行中间。我将 intro/outro 作为参数保留,因此您也可以将其用于 [] 或 (),尽管在这种情况下,对于正则表达式可能需要更多的转义。

前:

        fields = { 'Team1', 'Team2', 'Player1', 'Player2', 'Tab=Round', 'DateTime_UTC=DateTime', 'HasTime=TimeEntered', 'OverviewPage=Tournament', 'ShownName', 'Winner', 'Stream' },

后:

        fields = {
            'Team1',
            'Team2',
            'Player1',
            'Player2',
            'Tab=Round',
            'DateTime_UTC=DateTime',
            'HasTime=TimeEntered',
            'OverviewPage=Tournament',
            'ShownName',
            'Winner',
            'Stream',
        },
import sublime
import sublime_plugin
import re

class SplitLineCommand(sublime_plugin.TextCommand):
    def run(self, edit, sep=",", repl= "\n", intro="{", outro="}"):
        view = self.view
        find = re.escape(sep + ' ') + '*(?! *$| *\n)'
        intro_repl = intro + repl
        intro = intro + ' *'
        outro_repl_start = sep + repl
        outro_repl_end = outro
        outro = ',? *' + outro
        repl = sep + repl
        cursors = view.sel()
        if len(cursors) == 1:
            cursor = cursors[0]
            begin_offset = 0
            end_offset = 0
            if cursor.empty():
                region = view.line(cursor)
                content = view.substr(region)
                line_str = view.substr(view.line(view.sel()[0]))
                tabs = len(line_str) - len(line_str.lstrip())
                intro_repl = intro_repl + '\t' * (tabs + 1)
                repl = repl + '\t' * (tabs + 1)
                outro_repl = outro_repl_start + ('\t' * tabs) + outro_repl_end
                content = re.sub(outro, outro_repl, content)
                content = re.sub(find, repl, content)
                content = re.sub(intro, intro_repl, content)
                view.replace(edit, region, content)
            cursors.clear()
            cursors.add(sublime.Region(region.begin() + begin_offset, region.begin() + len(content) + end_offset))
            view.run_command("split_selection_into_lines")
于 2019-12-08T03:41:13.550 回答