2009-04-22 26 views
211

Tôi đang sử dụng để sử dụng vim để sửa đổi kết thúc dòng của một file:Làm cách nào để thay đổi mã hóa của tệp bằng 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 

Có thể sử dụng một quá trình tương tự để thay đổi mã hóa unicode của một tập tin? Tôi đang cố gắng điều sau đây, mà không làm việc:

$ 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 

tôi thấy someone say rằng ông có thể "đặt fileencoding = utf-8, sau đó cập nhật và viết các tập tin, và nó hoạt động", nhưng tôi dường như thiếu một cái gì đó, hoặc người nào khác anh ta bối rối. Tôi không biết ý anh ấy là gì "sau đó cập nhật."

Trả lời

211

Từ doc:

: viết ++ enc = utf-8 russian.txt

Vì vậy, bạn sẽ có thể thay đổi mã hóa như là một phần của lệnh ghi.

+2

liên kết tài liệu được cập nhật: http://vimdoc.sourceforge.net/htmldoc/usr_45.html#45.4 –

47

Cũng giống như các bước của bạn, việc đặt tính năng mã hóa sẽ hoạt động. Tuy nhiên, tôi muốn thêm một "bom đặt" để giúp trình chỉnh sửa xem xét tệp dưới dạng UTF8.

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

Cảm ơn câu trả lời của bạn, nó đã dẫn tôi đến tìm hiểu thêm về dấu thứ tự byte UTF. Tuy nhiên, FYI, thiết lập một BOM có vẻ không cần thiết/không thể chấp nhận cho UTF-8 vì nó không phải là một định dạng độ dài byte cố định như 16 hoặc 32. Xem [ở đây] (http://vim.wikia.com/wiki/Working_with_Unicode) để có giải thích và tham khảo. Nó không phải là một vấn đề (và thậm chí hữu ích) cho vim, tôi chỉ nghĩ mọi người nên biết rằng nó có thể gây ra các vấn đề tương thích ở nơi khác. – joelhardi

+1

Có phải là 'bom' hay' bom', và nó có thể là 'bỏ đặt' không? ** EDIT **: Có, bạn có thể xóa nó thông qua 'set nobomb'. – icedwater

+3

Có, VIm thiết lập cho chúng ta 'bom' (với b). – ruffin

148

Chú ý rằng có sự khác biệt giữa

set encoding 

set fileencoding 

Trong trường hợp đầu tiên, bạn sẽ thay đổi mã hóa đầu ra được hiển thị trong các thiết bị đầu cuối. Trong trường hợp thứ hai, bạn sẽ thay đổi mã hóa đầu ra của tệp được ghi.

+1

cảm ơn bạn!Apache đã xuất ra utf-8, do đó, là php, do đó, trình duyệt cho biết, do đó, vim nói với 'bộ mã hóa', và vẫn còn các trang cho thấy các ký tự bị xáo trộn đó là alright như iso-8859-1. bằng cách sử dụng 'set fileencoding' cho thấy một 'Latin1' –

71

Trong khi sử dụng vim để làm điều đó là hoàn toàn có thể, tại sao bạn không chỉ đơn giản là sử dụng iconv? Tôi có nghĩa là - tải trình soạn thảo văn bản chỉ để làm chuyển đổi mã hóa có vẻ như sử dụng búa quá lớn cho móng tay quá nhỏ.

Chỉ:

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

Và bạn đã hoàn tất.

+0

Plus đẹp, điều này có thể dễ dàng được viết cho nhiều tệp hơn. +1 –

+19

Nhược điểm, biểu tượng có thể không dễ dàng có trên Windows. –

+2

@AdrianoVaroliPiazza không phải vim. – Mario

3

Nó có thể là hữu ích để thay đổi encoding chỉ trên dòng lệnh trước khi các tập tin được đọc:

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

Xem starting, --cmd.

+2

Biến thể đầu tiên cũng sẽ hoạt động trên các shell * nix. ''chỉ cần thiết để thoát khỏi tất cả các ký tự meta, thường không phải là những gì bạn muốn. – jpaugh

Các vấn đề liên quan