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

a.txt包含宽字符串"hello",vimgrep hello *.txt什么也没有找到,当然它在正确的路径上。
发布于 2014-07-16 13:45:40
在这种情况下,"Unicode“有点误导。您所拥有的不是典型的文本“按照Unicode标准提供的任何方法编码”。它是一组法线字符,法线代码点用空字符分隔,代码点为0000或00。一些Java程序确实输出了这类垃圾。
所以,如果您的搜索模式是hello,Vim和:vim完全能够搜索和找到hello (没有NULL),但是他们永远找不到hello (用NULL)。
另一方面,搜索h^@e^@l^@l^@o (^@ is <C-v><C-@>)会找到hello (带NULL),但不会找到hello (没有NULL)。
无论如何,转换该文件/缓冲区或确保您不会得到这样的垃圾是更好的长期解决方案。
发布于 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以使用:
set encoding=utf-8
set fileencodings=ucs-bom,utf-16le,utf-8,default,latin1现在,用所需的编码加载文件应该可以很好地进行编辑,因此也适用于vimgrep。
https://stackoverflow.com/questions/24773345
复制相似问题