使用Sublime Text 3删除U+200B零宽度空格字符

9

我该如何在使用sublime text 3时添加U+200B字符或删除它们。 我找到了http://pastebin.com/ehWxNfMe,但不确定如何使用它。


sed -iE "s/$(echo -ne '\u200b')//g" file.txt - 这是唯一对我有效的方法。 - Amal Murali
2个回答

18

在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,并且可以通过软件包管理器轻松安装。


你的插件让我免受了很多困扰!谢谢! - Walker

13
以下方法适用于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特定版本

Sublime Text 3 API针对EventListener现在包括一个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")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接