Vim字符搜索替换函数错误

4
我有几个文档,我想有选择地搜索和替换一些非ASCII字符(例如将À替换为À)。我已经在我的_vimrc中创建了一个函数,以便我可以对任何文档调用它,但它给我返回“未找到模式”的错误。但是,在目标文档中进行简单的搜索和替换很好用——它按预期查找并替换字符。

如何使这个函数像普通的搜索和替换一样工作呢?

(我在Windows上使用gvim,并且所有文档都是Unix文件类型,采用UTF-8编码。)

以下是_vimrc中的函数:

function! Hc()
    execute '%s/À/\À/g'
endfunction

当我在目标文档中执行:call Hc()时,会出现以下错误:
Error detected while processing function Hc:
line   1:
E486: Pattern not found: À

但似乎我可以在目标文档中成功执行此操作:
:%s/À/\À/g

有什么建议、更正或解决方法吗?
1个回答

1
这似乎是您的~/.vimrc文件中的编码错误。如果您使用非ASCII字符,请确保指定文件的编码方式。
:scriptencoding utf-8

在文件顶部放置此行代码,并仅在此行之后定义自定义内容:
:set encoding=utf-8

替代方案

您还可以通过使用\%d\%x\%u原子来解决编码问题,例如:

:execute '%s/\%d192/\À/g'    " À is decimal 192 in UTF-8.

_vimrc 已经是utf-8,我已经加上了set fileencodings=utf-8这行代码。但备用解决方案似乎起作用了,所以我想我得使用它。谢谢! - Ralph Canapa
问题的根源在于 [函数] 定义和使用之间的编码变化。另一种选择确实更加安全,所以如果这对您有用,那就好了! - Ingo Karkat
这也是我想的,但当我在目标文件或_vimrc中执行:set fileencoding时,我得到了fileencoding = utf-8。因此,在文件之间更改编码似乎不应该成为问题。 - Ralph Canapa

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