vimgrep能够搜索unicode字符串吗? 例如: (VIM)vimgrep能够搜索unicode字符串
a.txt
包含宽字符串“hello”,vimgrep hello *.txt
一无所获,当然这是在正确的道路。
vimgrep能够搜索unicode字符串吗? 例如: (VIM)vimgrep能够搜索unicode字符串
a.txt
包含宽字符串“hello”,vimgrep hello *.txt
一无所获,当然这是在正确的道路。
“Unicode”在这种情况下有点误导。你所拥有的并不是典型的“按照Unicode标准提供的任何方法进行编码的文本”。这是一组正常字符,正常代码点以空字符分隔,代码点为0000
或00
。一些Java程序确实输出那种垃圾。
所以,如果你的搜索模式hello
,Vim后:vim
是完全能够搜索并找到hello
(无空值),但他们永远不会找到hello
(如果为空)。
为h^@e^@l^@l^@o
搜索(^@
是<C-v><[email protected]>
),而另一方面,会发现hello
(如果为空),但不hello
(无空值)。
无论如何,转换该文件/缓冲区或确保您没有最终得到这样的垃圾是更好的长期解决方案。
如果Vim能检测到文件的编码,那么是的,Vim可以grep文件。 :vimgrep
通过在正常(甚至包括autocmds)文件中首次读取到隐藏缓冲区中,然后搜索缓冲区。
它看起来像你的文件是little-endian UTF-16,没有字节顺序标记(BOM)。 Vim 可以检测到,但不会默认。
首先,确保你的Vim运行时支持unicode的内部。要做到这一点,:set encoding=utf-8
位于.vimrc的顶部。接下来,Vim需要能够检测到这个文件的编码。 'fileencodings'
选项控制这一点。默认情况下,当您将'encoding'设置为utf-8时,Vim的'fileencodings'选项包含“ucs-bom”,它将检测UTF-16,但仅在存在BOM时使用。为了在不存在BOM时检测到它,您需要将所需的编码添加到'fileencodings'中。它需要在任何8位编码之前,但在ucs-bom之后。试着在你的.vimrc的顶部做这和启动Vim使用:
set encoding=utf-8
set fileencodings=ucs-bom,utf-16le,utf-8,default,latin1
与所需的编码现在正在加载文件应该只是正常工作的编辑,因此也使用vimgrep。
谢谢,它的工作原理。 – aj3423
你是什么意思“宽字符串”? “你好”并不是一个真正的unicode的好例子。你的工作目录中是否有'a.txt'? – romainl
“宽字符串”我的意思是unicode字符串,我用图像更新了帖子。 “a.txt”在工作目录中。 – aj3423