如何搜索/替换特殊字符?

31
在从维基百科复制粘贴到Vim后,我得到了这个:
  1 A
  2 
  3 [+] Métier agricole<200e> – 44 P2 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 P4 C
  7 [×] Métier en rapport avec l'automobile<200e> – 10 P
  8 [×] Métier de l'aéronautique<200e> – 15 P
问题在于<200e>只是一个字符。 我想知道如何在搜索/替换(通过/:)中使用它。
3个回答

35

查看\%u的帮助:

                                /\%d /\%x /\%o /\%u /\%U E678
\%d123 匹配使用十进制数指定的字符。必须跟随一个非数字字符。 \%o40 匹配使用八进制数指定的字符,最多到0377。40以下的数字必须跟随一个非八进制数字或非数字。 \%x2a 匹配使用最多两个十六进制字符指定的字符。 \%u20AC 匹配使用最多四个十六进制字符指定的字符。 \%U1234abcd 匹配使用最多八个十六进制字符指定的字符。

这些是您可以使用的序列。看起来您有两个字节,因此\%u200e应该匹配它。不管怎样,这很奇怪。UTF-8 / ASCII中的20是空格字符,而0e是^N。请检查您的编码设置。


1
在UTF-8编码中,\u200e不会被编码为\x20\x0e,而是被编码为三个字节的\xE2\x80\x8E。你可以通过运行echo "\u200E" is# "\xE2\x80\x8E"来测试它,如果你的'encoding'选项等于'utf-8',它将输出1。因此,这个序列与空格或换行符没有任何关系。 - ZyX
谢谢@ZyX,现在清晰多了。我应该花点时间学习更多关于UTF-8的知识,我经常遇到这些问题,但并不真正理解它。如果您知道任何必读的文档,请告诉我。 - sidyll
顺便说一下,我认为\u202E的真正编码应该是\xE2\x80\xAE(现在我开始有点明白了)。 - sidyll
@sidyll 我最喜欢的关于这方面的链接,我几乎每6个月都会重新阅读一遍!http://www.joelonsoftware.com/articles/Unicode.html - Olivier Pons
@OlivierPons 谢谢您的分享,这篇文章真的很棒! - sidyll
显示剩余2条评论

4

4
如果您想快速选择并替换/删除所有多余字符,可以采取以下步骤:
  1. 在奇怪的字符前后添加空格,使其变成一个“单词”。
  2. 使用*命令搜索光标下的单词。如果您开启了set hlsearch,则应该会看到所有多余字符的出现位置都被突出显示。
  3. 全局替换上次搜索到的内容为其他内容: :%s//something else/

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