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