【问题标题】:How to search/replace special chars?如何搜索/替换特殊字符?
【发布时间】:2011-12-09 15:14:39
【问题描述】:

从 Wikipedia 复制粘贴到 Vim 后,我得到了这个:

  1 A
  2 
  3 [+] Métier agricole<200e> – 44 P • 2 C
  4 [×] Métier de l'ameublement<200e> – 10 P
  5 [×] Métier de l'animation<200e> – 5 P
  6 [+] Métier en rapport avec l'art<200e> – 11 P • 4 C
  7 [×] Métier en rapport avec l'automobile<200e> – 10 P
  8 [×] Métier de l'aéronautique<200e> – 15 P

问题是 &lt;200e&gt; 只是一个字符。

我想知道如何将其放入搜索/替换中(通过 /:)。

【问题讨论】:

    标签: vim replace


    【解决方案1】:
    1. 替换^@

      :%s/\%x00//g

    2. 替换^L

      // 使用 ctrl-V ctrl-L 输入^L

      :%s/^L//g

    指:

    【讨论】:

      【解决方案2】:

      查看\%u的帮助:

      /\%d /\%x /\%o /\%u /\%U E678 \%d123 匹配用十进制数指定的字符。一定是 后跟一个非数字。 \%o40 匹配用八进制数指定的字符,最大为 0377。 040 以下的数字后面必须跟非八进制数字或非数字。 \%x2a 匹配用最多两个十六进制字符指定的字符。 \%u20AC 匹配最多四个十六进制指定的字符 人物。 \%U1234abcd 匹配最多八个十六进制指定的字符 人物。

      这些是您可以使用的序列。看起来你有两个字节,所以\%u200e 应该匹配它。无论如何,这很奇怪。 UTF-8 / ASCII 中的 20 是空格 字符,0e 是 ^N。检查您的编码设置。

      【讨论】:

      • \u200e 在 utf-8 中从未编码为 \x20\x0e,它被编码为 三个 字节 \xE2\x80\x8E,您可以通过运行 echo "\u200E" is# "\xE2\x80\x8E" 来测试:如果您的“编码”选项等于“utf-8”,它将输出 1。所以,这个序列与空格或换行无关。
      • 谢谢@ZyX,现在更清楚了。我应该花一点时间来了解更多关于 UTF-8 的信息,我经常在这里和那里面对这些,但并没有真正理解它。如果您知道本主题中必须阅读的任何文档,请告诉我。
      • @ZyX 顺便说一下,我认为\u202E 的真正编码是\xE2\x80\xAE(我现在开始看到一点)
      • UTF-8 在 wikipedia 中有描述,还必须有一些链接,包括 RFC 的链接(我只读了俄文版本,并没有费心去记住它)。您始终可以通过 echo "\u202E"[0] "\u202E"[1] ... "\u202E"[len("\u202E")-1] 或使用 let s="\u202E" | echo map(range(len(s)), 's[v:val]') 自动获取特定符号的编码方式。
      • @sidyll 我最喜欢的链接,我仍然几乎每 6 个月重读一次! joelonsoftware.com/articles/Unicode.html
      【解决方案3】:

      如果您想在各处快速选择此无关字符并替换/删除它,您可以:

      1. 通过在其前后添加一个空格来隔离其中一个奇怪的字符,使其成为一个“单词”
      2. 使用* 命令搜索光标下的单词。如果您打开了set hlsearch,您应该会看到所有出现的无关字符都突出显示。
      3. 全局替换上次搜索的项目: :%s//something else/

      【讨论】:

        猜你喜欢
        • 2011-04-23
        • 1970-01-01
        • 2011-01-04
        • 2011-05-12
        • 1970-01-01
        • 2021-09-20
        • 1970-01-01
        • 2011-12-28
        相关资源
        最近更新 更多