首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(VIM)是能够搜索unicode字符串的vimgrep。

(VIM)是能够搜索unicode字符串的vimgrep。
EN

Stack Overflow用户
提问于 2014-07-16 06:06:47
回答 2查看 214关注 0票数 0

vimgrep能够搜索unicode字符串吗?例如:

a.txt包含宽字符串"hello",vimgrep hello *.txt什么也没有找到,当然它在正确的路径上。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-16 13:45:40

在这种情况下,"Unicode“有点误导。您所拥有的不是典型的文本“按照Unicode标准提供的任何方法编码”。它是一组法线字符,法线代码点用空字符分隔,代码点为000000。一些Java程序确实输出了这类垃圾。

所以,如果您的搜索模式是hello,Vim和:vim完全能够搜索和找到hello (没有NULL),但是他们永远找不到hello (用NULL)。

另一方面,搜索h^@e^@l^@l^@o (^@ is <C-v><C-@>)会找到hello (带NULL),但不会找到hello (没有NULL)。

无论如何,转换该文件/缓冲区或确保您不会得到这样的垃圾是更好的长期解决方案。

票数 1
EN

Stack Overflow用户

发布于 2014-07-16 13:18:35

如果Vim能够检测到文件的编码,那么是的,Vim可以对文件进行grep。:vimgrep的工作方式是首先将文件作为常规(甚至包括自动and )读入隐藏缓冲区,然后搜索缓冲区。

看起来您的文件是小端UTF-16,没有字节顺序标记(BOM)。Vim可以检测到这一点,但默认情况下不会。

首先,确保您的Vim运行时具有对unicode的内部支持。要做到这一点,:set encoding=utf-8位于.vimrc的顶部。接下来,Vim需要能够检测到该文件的编码。'fileencodings'选项控制这一点。

默认情况下,当您将‘编码’设置为utf-8时,Vim的‘fileencoding’选项包含"ucs- BOM“,它将检测UTF-16,但只在BOM存在时。此外,当没有BOM存在时,还需要将所需的编码添加到“文件编码”中。它需要在任何8位编码之前,但在ucs之后。尝试在.vimrc顶部执行此操作,并重新启动Vim以使用:

代码语言:javascript
复制
set encoding=utf-8
set fileencodings=ucs-bom,utf-16le,utf-8,default,latin1

现在,用所需的编码加载文件应该可以很好地进行编辑,因此也适用于vimgrep。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24773345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档