删除每个空格、制表符或换行符,直到出现一个带有 Sublime 的字符

Delete every whitespace or tab or newline until a character is present with Sublime

提问人:Basj 提问时间:1/18/2023 最后编辑:Basj 更新时间:1/24/2023 访问量:76

问:

使用 ST2,在当前光标位置,我想删除每个空格或制表符或换行符,直到出现字符。 或者某种作品,但有时你必须多次重复它(或者当中间有空行时,它不起作用)等等。
没有办法用 Sublime 2 做到这一点?
CTRL+DELCTRL+J

以前:

hello here is the cursor |    

    dfsdlkf

后:

hello here is the cursor |dfsdlkf
sublimetext2 sublimetext

评论

2赞 MattDMo 1/19/2023
您仍在使用ST2的特殊原因是什么?ST4 大约在 2 年前发布,非常稳定。有很多改进和附加功能。

答:

3赞 MattDMo 1/19/2023 #1

编辑

虽然下面在我最初的答案中描述的 RegReplace 插件非常适合各种事情,包括此任务,但这里并不是绝对需要的。您可以制作一个快速的专用插件,该插件是硬编码的,可以做到这一点。

在 ST2 中,选择“工具”→“新建插件...”。擦除显示的文件的内容并粘贴到其中:

import sublime_plugin

class RemoveWhitespaceToNextCharCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        reg = self.view.find(r"\s+", self.view.sel()[0].a)
        self.view.replace(edit, reg, "")

点击保存,它会自动选择您的文件夹作为位置。将文件命名为 。保存后,该命令将可用,无需重新启动。Packages/Userremove_whitespace_to_next_char.pyremove_whitespace_to_next_char

按照以下说明创建自定义键绑定,请仅使用此键绑定:

    {
        "keys": ["ctrl+alt+space"], 
        "command": "remove_whitespace_to_next_char"
    }

同样,您可以使用当前未使用的任何键组合。保存键绑定文件,就是这样!每当您想删除光标前面的下一个非空格字符之前的任何空格时,只需按 .CtrlAltSpace

该插件也将在 ST3 和 ST4 中按原样工作。


原始答案

遗憾的是,无法用宏记录查找/替换操作。但是,可以使用名为 RegReplace 的插件来执行此任务。由于仍在使用 ST2,因此需要将存储库的 ST2 分支直接克隆到文件夹中,该文件夹是在选择“首选项”→“浏览包...”时打开的文件夹。克隆存储库并切换到 ST2 分支后,重新启动 ST2 以使正确版本的插件生效。Packages

现在,选择“首选项”→“包设置”→“Reg Replace → Settings-User”,将打开一个空白文件。将其内容设置为以下内容:

{
    "replacements": {
        "remove_spaces_to_next_char": {
            "find": "(\\s+)",
            "replace": "",
            "greedy": false,
            "case": false
        }
    }
}

保存文件 - 它应该自动保存在您的目录中。正则表达式非常简单 - 它只是在当前光标位置的前面找到一个或多个空格字符(包括、、和),直到下一个非空格字符,并将它们替换为任何内容。Packages/User\s \t\r\n

接下来,我们需要将新命令分配给键绑定。选择“首选项”→“键绑定-用户”以打开自定义键绑定文件。如果没有任何设置,则该文件将包含一个空的 JSON 数组:

[
]

如果您已经分配了自定义键绑定,则可以将新键绑定放在您想要的任何位置。在开头和结尾之间添加以下内容:[]

    {
        "keys": ["ctrl+alt+space"], 
        "command": "reg_replace",
        "args": {"replacements": ["remove_spaces_to_next_char"]}
    }

这会将我们的新命令分配给 ,该命令在 ST2 的全新安装中未使用。您需要验证它是否在您的环境中未使用。您可以将其更改为您喜欢的任何组合。CtrlAltSpace

就是这样。在光标位于第一行位置的示例文本中,运行该命令将生成:|

hello here is the cursor |dfsdlkf

注意:该解决方案也应该使用 ST3 和 ST4 开箱即用。只需确保使用包控制来安装插件而不是手动克隆,这样您就可以获得更新(如果将来有更新)。RegReplace

评论

0赞 MattDMo 1/24/2023
@Basj实际上,使用自定义插件可以执行此特定任务。请参阅答案顶部的编辑。 如果您定期执行其他正则表达式搜索和替换操作,它仍然是一个很好的资源,但对于此问题不是必需的。RegReplace