使用崇高文本3删除U+200B零宽度空格字符



如何在使用崇高文本3时生成U+200B字符或删除它们。我发现http://pastebin.com/ehWxNfMe但我不知道如何使用它

删除Sublime Text中零宽度空格的最简单方法是使用搜索和替换功能:

  • Ctrl + h(适用于Mac的Alt + Cmd + f
  • 通过单击搜索面板上最左边的按钮或按Alt + r(适用于Mac的Alt + Cmd + r)启用正则表达式标志
  • 输入x{200b}作为搜索词
  • 确保";替换为";字段为空并且命中";全部替换"

永远解决这个问题的插件

我搜索了一个插件,它会突出显示所有可能破坏代码的字符,但找不到Sublime Text的插件,所以我写了一个:https://github.com/TuureKaunisto/highlight-dodgy-chars

该插件遵循白名单原则:所有未在设置中列入白名单的非ascii字符都会突出显示。

如果你想突出显示基于你自己的正则表达式的东西,这个插件可以做到:https://github.com/bluegray/Highlighter并且还可以通过Package Manager轻松安装。

以下内容将适用于Sublime Text 2和3。然而,由于稍后讨论的一些问题,在编辑大文件和/或在速度较慢的计算机上,它有可能阻止程序。使用异步方法的Sublime Text 3特定版本位于底部。

在Sublime中打开一个新文件,并将其语法设置为Python。将以下内容粘贴到其中:


import sublime_plugin
class ShowZeroWidthSpace(sublime_plugin.EventListener):
    def on_modified(self, view):
        spaces = []
        p = 0
        while True:
            s = view.find(u'u200b', p + 1)
            if not s:
                break
            spaces.append(s)
            p = s.a
 
        if spaces:
            view.add_regions("zero-width", spaces, "invalid")
        else:
            view.erase_regions("zero-width")

Packages/User目录中的文件保存为show_zero_width_space.py,它应该会立即开始工作。基本上,它所做的是,每次修改当前视图时,它都会逐个字符地搜索,寻找零宽度空间字符U+200B。如果它找到了一个,它会将该位置添加到列表中,并一直查找,直到到达文件的末尾。然后,如果找到任何字符,则会根据主题中的invalid范围高亮显示这些字符。高亮显示后,可以选择并删除它们。

由于这个插件在每次修改视图时都会运行(例如,在每次击键后),它有可能真正降低Sublime的速度,尤其是对于大文件。因此,如果你正在处理你知道是干净的文件,只需将插件重命名为show_zero_width_space.py.old,并确保删除任何名为show_zero_width_space.pyc的文件,它就不会处于活动状态。有关Sublime Text 3特定的解决方法,请参阅下文。


Sublime Text 3特定版本

用于EventListener的Sublime Text 3 API现在包括on_modified_async()方法,这与所有ST3函数现在都是线程安全的事实相一致。这以非阻塞的方式异步运行代码,所以Sublime不应该因此而放慢速度


import sublime_plugin
class ShowZeroWidthSpace(sublime_plugin.EventListener):
    def on_modified_async(self, view):
        spaces = []
        p = 0
        while True:
            s = view.find('u200b', p + 1)
            if not s:
                break
            spaces.append(s)
            p = s.a
 
        if spaces:
            view.add_regions("zero-width", spaces, "invalid")
        else:
            view.erase_regions("zero-width")

最新更新