我只是试图清理包含字符“ſ”(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
我不确定观察到的行为是否应该被视为错误,但我当然不会期望它。
一般来说,搜索/替换 ASCII 或拉丁语 1 或 2 之外的字符最好使用
:help /\%u
下描述的符号。在这种情况下,我会使用这个符号:
:[range]s/\%u017F/s/g