Đặt mã hóa và mã tập tin thành utf-8 trong Vim


95

Sự khác biệt giữa hai lệnh này là gì?

  • set encoding=utf-8
  • set fileencoding=utf-8

Tôi có cần đặt cả hai khi tôi muốn sử dụng utf-8 không?

Ngoài ra, tôi có cần đặt mã tập tin bằng sethoặc setglobalkhông?


Lưu ý rằng sẽ an toàn hơn nếu đặt mã hóa trong LOCALE của bạn thay vì buộc trong Vim, trong trường hợp bạn sẽ chỉnh sửa tệp không phải unicode. Bạn sẽ nhận được kết quả tương tự vì nó sẽ mặc định là LOCALE và bạn sẽ không nhầm lẫn bất kỳ ký tự nước ngoài nào nếu gặp.
timss

Câu trả lời:


89

TL; DR

Trong trường hợp đầu tiên với set encoding=utf-8, bạn sẽ thay đổi mã hóa đầu ra được hiển thị trong thiết bị đầu cuối.

Trong trường hợp thứ hai với set fileencoding=utf-8, bạn sẽ thay đổi mã hóa đầu ra của tệp được ghi .

Như đã nêu bởi @Dennis, bạn có thể đặt cả hai trong ~ / .vimrc của mình nếu bạn luôn muốn làm việc utf-8.

Thêm chi tiết

Từ wiki của VIM về cách làm việc với unicode

" encodingthiết lập cách vim sẽ đại diện cho các ký tự bên trong . Utf-8 cần thiết cho hầu hết các phiên bản Unicode."

" fileencodingđặt mã hóa cho một tệp cụ thể (cục bộ thành bộ đệm);: setglobal đặt giá trị mặc định. Giá trị trống cũng có thể được sử dụng: giá trị này được mặc định giống như 'mã hóa'. Hoặc bạn có thể muốn đặt một trong các mã hóa ucs, Nó có thể làm cho cùng một tệp đĩa lớn hơn hoặc nhỏ hơn tùy thuộc vào kết hợp ký tự cụ thể của bạn. Ngoài ra, IIUC, utf-8 luôn là big-endian (bit cao trước) trong khi ucs có thể là big-endian hoặc little-endian, vì vậy nếu bạn sử dụng nó, bạn có thể sẽ cần đặt 'bom' (xem bên dưới). "


3
Xin lỗi, tôi không hiểu. Mã tập tin làm gì chính xác hơn?
Kiraly Zoltan

25
Trong trường hợp đầu tiên, bạn sẽ thay đổi mã hóa đầu ra được hiển thị trong 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.
Adrien Lacroix

1
+1 Để có câu trả lời ngắn gọn và hấp dẫn, thay vì chỉ lặp lại tài liệu chính thức! :)
425 thứ ba,

Nếu cần, ad-hoc trực tiếp từ dòng lệnh vim -c "set encoding=utf-8" file.ext.
Hans Ginzel

87
set encoding=utf-8  " The encoding displayed.
set fileencoding=utf-8  " The encoding written to file.

Bạn cũng có thể đặt cả hai trong của mình ~/.vimrcnếu bạn luôn muốn làm việc với utf-8.


0

Bạn có thể đặt biến 'fileencodings' trong .vimrc của mình.

Đây là danh sách các bảng mã ký tự được xem xét khi bắt đầu chỉnh sửa tệp hiện có. Khi một tệp được đọc, Vim cố gắng sử dụng mã hóa ký tự được đề cập đầu tiên. Nếu lỗi được phát hiện, lỗi tiếp theo trong danh sách sẽ được thử. Khi một mã hóa được tìm thấy hoạt động, 'mã hóa tệp' được đặt thành mã đó. Nếu tất cả đều không thành công, 'mã tập tin' được đặt thành một chuỗi trống, có nghĩa là giá trị của 'mã hóa' được sử dụng.

Xem :help filencodings

Nếu bạn thường xuyên làm việc với ví dụ: cp1252, bạn có thể thêm nó vào đó:

set fileencodings=ucs-bom,utf-8,cp1252,default,latin9
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.