Unicode 字符 ſ 与其本身和 's 匹配。'

问题描述 投票:0回答:1

我只是试图清理包含字符“ſ”(U+017F)的旧德语文本。我想用“s”替换它。但是当我使用

:%s/ſ/s/g
时,不仅该字符被替换,而且所有出现的 's' 后跟任意字符都被替换,就像我使用了命令
:%s/s./s/g
一样。作为示例,文本:

Die Gleichheit **) fordert das Nachdenken heraus durch Fragen, die ſich daran knüpfen und nicht ganz leicht zu beantworten ſind.

将被我的命令替换为

Die Gleichheit **) fordert dasNachdenken herausdurch Fragen, die sich daran knüpfen und nicht ganz leicht zu beantworten sind.

我认为这可能与“ſ”在 UTF8 中表示为两个字节的序列(0xC5 0xBF)这一事实有关。但这不是一个错误吗?如果没有,有没有办法只替换 'ſ' 而不是 's.'?

我正在使用

fileencoding=utf-8

> vim --version
VIM - Vi IMproved 9.1 (2024 Jan 02)
Included patches: 1-151
> echo $LANG
de_DE.UTF-8
vim utf-8 utf
1个回答
0
投票

我不确定观察到的行为是否应该被视为错误,但我当然不会期望它。

一般来说,搜索/替换 ASCII 或拉丁语 1 或 2 之外的字符最好使用

:help /\%u
下描述的符号。在这种情况下,我会使用这个符号:

:[range]s/\%u017F/s/g
© www.soinside.com 2019 - 2024. All rights reserved.