2012-10-19 24 views
17

Tôi chỉnh sửa tất cả các loại tệp với Vim (vì tôi chắc chắn hầu hết người dùng Vim đều làm). Một lỗi gấu tôi có là những gì Vim không khi tôi đi qua một tập tin với một mã hóa lẻ. Hầu hết các biên tập viên (những ngày này) làm cho một đâm tốt lúc phát hiện mã hóa tập tin. Tuy nhiên, Vim thường không. Và bạn phải gõ, ví dụ:Có thể tự động đặt mã hóa tệp UTF16 khi mở tệp thuộc loại đó không?

:e ++enc=utf-16le 

Để đọc lại các tập tin trong UTF-16 (Nếu không, bạn có được một khối lượng của dấu hiệu @)

Tôi đã tìm kiếm xung quanh và đã thấy kịch bản như set_utf8.vim có thể phát hiện một mã hóa tệp cụ thể. Tuy nhiên, có giải pháp tổng quát hơn không? Tôi là một chút chán của việc phải tự làm việc ra những gì các tập tin mã hóa và tư vấn giúp đỡ mỗi khi tôi mở một tập tin bất thường.

Trả lời

10

Thêm tên mã hóa để 'fileencodings' nên làm các trick:

:set fencs=ucs-bom,utf-16le,utf-8,default,latin1 

Ngoài ra còn có plugin như AutoFencfencview.

+0

+1 Những cái nhìn rất hữu ích, mặc dù buồn bã không làm việc trên các tập tin đăng nhập BOMless UTF16 của tôi, ah tốt, tôi sẽ chỉ thêm một AutoFileCmd cụ thể cho những ... Cảm ơn mặc dù! – Benj

2

Bạn có dấu thứ tự byte không? Vim nên phát hiện điều này và làm việc một cách thích hợp. Từ the doc - section 45.4:

Khi bạn bắt đầu chỉnh sửa mà 16-bit tập tin Unicode, và nó có một BOM, Vim sẽ phát hiện này và chuyển đổi các tập tin để utf-8 khi đọc nó. Tùy chọn 'tệp mã hóa' (không có s ở cuối) được đặt thành giá trị được phát hiện . Trong trường hợp này, nó là "utf-16le". Điều đó có nghĩa là Unicode, 16 bit và nhỏ gọn. Định dạng tệp này phổ biến trên MS-Windows (ví dụ: đối với tệp đăng ký).

+0

Hmm, tập tin này đặc biệt không có một BOM (mà là số lẻ trên Windows) tốt để biết rằng điều này sẽ làm việc trên các tập tin với một BOM mặc dù ... – Benj

+1

Điều này không hiệu quả đối với tôi. Gvim trên Windows, tệp > xxd. \ Utf16.txt 00000000: fffe 4100 4200 a300 2400 ac20 6300 6400 ..A.B ... $ .. c.d. 00000010: 6500 0d00 0a00 e ..... Khi tôi thực hiện "gvim utf16.txt" Tôi thấy '-^^ B^@ £^@ $^@ ¬ c^@ d^@ e^@^M^@ '... (xin lỗi vì định dạng, không có ý tưởng làm thế nào để làm văn bản định dạng trước trong một bình luận ...) –

0

Thêm mã này để bạn vimrc:

if has("multi_byte") 
    if &termencoding == "" 
    let &termencoding = &encoding 
    endif 
    set encoding=utf-8 
    setglobal fileencoding=utf-8 
    "setglobal bomb 
    set fileencodings=ucs-bom,utf-8,latin1 
endif 
Các vấn đề liên quan