2009-06-17 27 views
17

Tôi nhận thấy rằng hầu hết thời gian, khi sử dụng một số mã hóa khác với 'tiếng Anh chuẩn', vim không nhận dạng và không hiển thị chính xác các ký tự.
Điều này dễ thấy nhất bằng cách mở một số đồ họa ascii hoặc các tệp tương tự trên mạng, sử dụng trang mã cp437.Làm thế nào tôi có thể làm vim nhận dạng mã hóa của tệp?

Có cách nào để kiểm tra vim mã hóa khi mở tệp hay không và mở nó bằng đúng?

Bạn sử dụng mã hóa nào, là loại mã hóa "di động" nhất (loại nào có số lượng người dùng lớn nhất sẽ gặp phải ít sự cố nhất)?

+0

Vấn đề bạn đang phải đối mặt với không có nhiều việc phải làm với tiếng Anh, bởi vì nhiều dấu chấm câu được sử dụng bằng tiếng Anh bị thiếu từ ASCII, chẳng hạn như biểu tượng cảm xúc và một số ký hiệu tiền tệ, bao gồm từ một số quốc gia nói tiếng Anh. ASCII chỉ thực sự có tiếng Anh-Mỹ trong tâm trí, mà không thực sự là 'tiêu chuẩn', nhiều như USAns muốn giả vờ nó. ;-) –

Trả lời

20

Vim cần phát hiện mã hóa và điều này sẽ có vấn đề, vì tệp thường không nêu rõ mã hóa của chúng (ngoại lệ rõ ràng là các tệp XML có thuộc tính mã hóa trong tiêu đề).

Bạn có thể buộc Vim để tải lại một tập tin với một mã hóa khác nhau như sau:

:e ++enc=cp437 

và bạn có thể thiết lập mã hóa mặc định trong vimrc của bạn nếu bạn muốn.

This page có thêm thông tin và liên kết, đặc biệt là wrt. chỉnh sửa Unicode. UTF-8 là mã hóa được sử dụng rộng rãi nhất và mặc định bạn nên sử dụng.

+1

Thật tuyệt khi thấy những người thông minh trên khắp thế giới.Cảm ơn bạn vì một câu trả lời hữu ích như vậy;) –

2

Bạn có thể sử dụng mô hình vim để đặt mã hóa của tệp. Đây chỉ đơn giản là một nhận xét, trong năm dòng đầu tiên của tệp, bắt đầu bằng vi: set fileencoding=cp437.

Bạn cũng có thể bắt đầu với 'vim:', thay vì 'vi: set', nhưng sau này làm cho nó tương thích với nhiều trình chỉnh sửa hơn. Bạn chắc chắn cần khoảng trống giữa các tiền tố này và 'mã hóa tệp', hoặc bất kỳ tùy chọn nào bạn muốn đặt. Tuy nhiên, tùy chọn fileencoding sẽ giải quyết được vấn đề của bạn.

Vì vậy, trong Python hoặc một file rc, bạn có thể đặt này ở phía trên cùng của tập tin của bạn:

# vi: set fileencoding=cp437 

Trong Java, C, C++, JavaScript vv đặt này:

// vi: set fileencoding=cp437 

Để biết thêm thông tin, trong vim, nhập :help modeline.

+0

Đã được chỉnh sửa theo đề xuất của người dùng @SumnerHayes, để cho biết modeline phải là một trong năm dòng đầu tiên trong tệp. –

0

Bạn có thể mã hóa các tệp của mình bằng cách sử dụng unicode và đặt Byte Order Mark (BOM) trong tệp. Điều này sẽ làm cho vim đối xử với nó một cách thích hợp, nhưng một số trình biên dịch và chương trình có thể gặp rắc rối với nó. Ngay cả các lệnh shell cơ bản như cat cũng có thể không đúng với một số trường hợp sử dụng.

Để làm điều đó, gõ này trong vim:

:set fileencoding=utf-8 
:set bomb 
:w 

Để biết thêm thông tin, gõ:

:help bomb 
Các vấn đề liên quan