2009-04-22 72 views
211

我習慣於使用vim修改一個文件的行結束:如何使用vim更改文件的編碼?

$ file file 
file: ASCII text, with CRLF line terminators 
$ vim file 
:set ff=mac 
:wq 
$ file file 
file: ASCII text, with CR line terminators 

是否有可能使用類似的過程來更改文件的Unicode編碼?我嘗試以下,這不工作:

$ file file.xml 
file.xml: Unicode text, UTF-16, little-endian 
$ vim file 
:set encoding=utf-8 
:wq 
$ file file.xml 
file.xml: Unicode text, UTF-16, little-endian 

我看到someone say,他可以「設置fileencoding = utf-8,然後更新和寫入文件,和它的作品,」但我似乎失去一些東西,否則他感到困惑。我不知道他的意思是「然後更新」。

回答

211

doc

:寫++ ENC = UTF-8 russian.txt

所以,你應該能夠改變編碼爲寫命令的一部分。

+2

更新文檔鏈接:http://vimdoc.sourceforge.net/htmldoc/usr_45.html#45.4 – 2012-05-10 18:10:19

47

就像你的步驟,設置fileencoding應該工作。不過,我想添加一個「set bomb」來幫助編輯將文件視爲UTF8。

$ vim file 
:set bomb 
:set fileencoding=utf-8 
:wq 
+7

感謝您的回答,這讓我更多地瞭解了UTF字節順序標記。然而,僅供參考,對於UTF-8,設置BOM對於UTF-8來說似乎不必要/不適用,因爲它不是像16或32這樣的固定字節長度格式。有關解釋,請參見[這裏](http://vim.wikia.com/wiki/Working_with_Unicode)和參考。這對vim來說不是問題(甚至是有用的),我只是認爲人們應該意識到它可能會導致其他地方的兼容性問題。 – joelhardi 2011-06-01 19:22:22

+1

它是'bomb`還是`bom`,並且可以'unset`? **編輯**:是的,你可以通過設置nobomb刪除它。 – icedwater 2014-07-01 02:33:51

+3

是的,VIm給我們設置了'炸彈'(帶有b)。 – ruffin 2014-10-16 14:57:42

148

注意,有

set encoding 

set fileencoding 

之間的差。在第一種情況下,你會改變其在所述終端中所示的輸出編碼。在第二種情況下,您將更改寫入文件的輸出編碼。

71

雖然使用vim來完成它是完全有可能的,爲什麼不簡單地使用iconv?我的意思是 - 加載文本編輯器只是爲了做編碼轉換,似乎使用太大的錘子太小的指甲。

剛:

iconv -f utf-16 -t utf-8 file.xml > file.utf8.xml 

大功告成。

3

閱讀文件,才能夠改變encoding只是在命令行中有用:

rem On MicroSoft Windows 
vim --cmd "set encoding=utf-8" file.ext 
# In *nix shell 
vim --cmd 'set encoding=utf-8' file.ext 

starting--cmd