Cách xem các ký tự UTF-8 trong VIM hoặc Gvim


106

Thỉnh thoảng tôi làm việc trên các trang web liên quan đến các tập lệnh không phải tiếng Anh, hầu hết chúng sử dụng bộ mã utf-8, VIM và Gvim không hiển thị chính xác các Ký tự UTF-8.

Sử dụng VIM 7.3.46 trên windows 7 64 bit, với set guifont=Monaco:h10_vimrc

Có cách nào để sửa lỗi này?

Cập nhật: Tôi đã tìm kiếm xung quanh và nhận thấy set guifontwidehoạt động như dự phòng thứ hai cho các ngôn ngữ khu vực.

Tôi đã thêm các dòng sau vào _vimrc và hầu hết các vấn đề của tôi đã được giải quyết.

set enc=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf8,prc
set guifont=Monaco:h11
set guifontwide=NSimsun:h12

Phông chữ NSimsun ở trên hoạt động với tiếng Trung Quốc, Vấn đề là tôi không biết làm thế nào họ có tên phông chữ để hoạt động với VIM, Courier Newđược đề cập là Courier_Newcũng NSimsunkhông có trong thư mục phông chữ. Phông chữ tôi muốn sử dụng là LathaNhưng, tôi không biết cách sử dụng nó trong File _vimrc. set guifontwide=latha:h12hoặc set guifontwide=Latha:h12không hoạt động.

Nếu tôi thành công thiết lập guifontwideđể latha, sau đó vấn đề của tôi sẽ được giải quyết, Làm thế nào để làm điều đó?


giá trị của 'guifont'và giá trị của là 'guifontwide'gì? Ngoài ra, bạn đang sử dụng hệ điều hành nào và phiên bản vim nào?
Benoit

Sathish, bạn có thể tìm ra giải pháp nào cho việc này không? Tôi đang cố gắng gõ gVim bằng phần mềm eKalappai nhưng vim chỉ hiển thị cho tôi ?? ký tự (dường như lưu chúng theo cùng một cách).
sundar - Phục hồi Monica

@sundar Không. Tôi đã bỏ cuộc: |
Sathish Manohar

Vấn đề của tôi là incolata-g không hỗ trợ các ký tự utf-8 trong tài liệu của tôi.
AndrewPK

Sử dụng set guifontwide=NSimsun:h12không thành công đối với tôi, nói "Phông chữ rộng không hợp lệ" có thể là cùng một vấn đề không phải monospace?
mikew

Câu trả lời:


61

Cố gắng tải lại tài liệu bằng cách sử dụng:

:e! ++enc=utf8

Nếu điều đó hoạt động, bạn có thể nên thay đổi fileencodingscài đặt trong .vimrc của mình.


2
Không thay đổi bất cứ điều gì đối với tôi
Thomas Levesque

8
KHÔNG chạy điều này trước khi lưu công việc của bạn vì nó sẽ xóa các thay đổi bạn đã thực hiện. :usẽ giúp bạn tiết kiệm.

Ngoài ra bộ này tập tin để chỉ đọc khi bạn làm điều này, vì vậy bạn cũng cần phải sau đó chạy:set noro
Matt Vukomanovic

2
Cảm ơn vì điều đó. Vim không hiển thị utf-8 trong trường hợp của tôi vì tôi có một khối dữ liệu nhị phân (phần đính kèm dữ liệu đa phần / biểu mẫu). Khi tôi làm vậy :e! ++enc=utf8, nó đã hiển thị utf-8, nhưng bị phàn nàn [ILLEGAL BYTE in line 286](dòng phần nhị phân đầu tiên) bên trong tệp. Tôi đoán hành vi mặc định là im lặng trở lại một số mã hóa khác khi điều này xảy ra khi mở Vim. Tuy nhiên, vì một số lý do, echo &encvẫn báo cáo utf-8 trong trường hợp đó.
Dmitry Minkovsky

1
@DmitryMinkovsky, &enclà vim mã hóa sử dụng nội bộ để lưu trữ nội dung bộ đệm. Cài đặt chứa mã hóa cho tệp hiện tại là&fenc
Benoit

60

Bạn đã thử chưa

:set encoding=utf-8
:set fileencoding=utf-8

?


5
Tôi đã thử với cả hai cài đặt này và tôi vẫn không thấy ký tự utf-8.
Sathish Manohar

1
-1. Trên thực tế, điều này không thể hoạt động. Cả hai tùy chọn này sẽ không tải lại tệp. Cái đầu tiên sẽ sửa đổi cách vim lưu trữ bộ đệm (và những thứ khác) bên trong, cái thứ hai sẽ chỉ định rằng bạn muốn thay đổi mã hóa của tệp đã được tải trong bộ đệm, điều này sẽ áp dụng khi lưu nó.
Benoit ngày

:set encoding=utf8 SẼ làm mới bộ đệm và nếu sự cố do mã hóa không chính xác, nó sẽ khắc phục sự cố. Tôi đã thêm set fileencoding=utf8tùy chọn để bạn không gặp phải lỗi "Không thể chuyển đổi một số ký tự" khó hiểu nhất khi lưu.
Maxim Sloyko

bộ mã hóa đã hoạt động. Tôi đã thêm set encoding = utf8 vào tệp .vimrc và bây giờ mọi thứ đều ổn với utf8.
Alexander Kim

Trên OSX, tôi đã bổ sung thêm hai dòng sau (không có dấu hai chấm) để tôi ~/.vimrcvà nó làm việc tốt
lionello

7

Nếu người Nhật đến đây, vui lòng thêm những dòng sau vào ~/.vimrc

set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac

6

Trên Microsoft Windows, gvim sẽ không cho phép bạn chọn các phông chữ không liền mạch. Thật không may, Latha là một phông chữ không liền mạch.

Có một cách hack để biến nó thành hiện thực: Sử dụng FontForge (bạn có thể tải xuống bản nhị phân Windows từ http://www.geocities.jp/meir000/fontforge/ ) để chỉnh sửa Latha.ttf và đánh dấu nó là phông chữ monospaced. Làm như thế này:

  1. Tải fontforge, chọn latha.ttf.
  2. Menu: Thành phần -> Thông tin Phông chữ
  3. Chọn "OS / 2" từ danh sách bên trái trên hộp thoại Thông tin phông chữ
  4. Chọn tab "Toàn cảnh"
  5. Đặt tỷ lệ = Monospaced
  6. Lưu phiên bản TTF mới của phông chữ này, hãy dùng thử!

Chúc may mắn!


1
Tôi không thể thay đổi phông chữ latha thành monospace. Tôi đi theo bước của bạn chính xác nhưng các tập tin lưu vẫn không hoạt động như các font chữ đơn :(
Sathish Manohar

1
@Sathish Manohar 1) ghi đè lên tệp TTF hiện có, khởi động lại Windows của bạn và thử nó. hoặc 2) bạn có thể lưu TTF vào một tệp mới và sửa đổi tên phông chữ. Cài đặt tệp TTF mới. Phông chữ mới này sẽ có sẵn trong danh sách của bạn.
Yi Zhao,

Sau ngần ấy năm (7 năm) sau, có một số phông chữ miễn phí dành cho VIM. Phông chữ Google Noto google.com/get/noto ; và Iosveka github.com/be5invis/Iosevka/releases là những lựa chọn thay thế rất tốt để đánh giá.
Yi Zhao

3

Trong Linux, Mở tệp cấu hình VIM

$ sudo -H gedit /etc/vim/vimrc

Đã thêm các dòng sau:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

Lưu và thoát và lệnh đầu cuối:

$ source /etc/vim/vimrc

Lúc này VIM sẽ hiển thị chính xác tiếng Trung.


2

Vấn đề này có được giải quyết trong khi đó không?

Tôi gặp sự cố là gvim không hiển thị tất cả các ký tự unicode (mà chỉ là một tập hợp con, bao gồm âm sắc và ký tự có dấu), trong khi :set guifont?trống; xem câu hỏi của tôi . Sau khi đọc đến đây, việc đặt guifontthành một giá trị hợp lý đã sửa nó cho tôi. Tuy nhiên, tôi không cần các ký tự vượt quá 2 byte.


1
Giá trị hợp lý cho guifont là gì? Bạn đã đưa gì vào?
Christian

Tôi đã liệt kê các giá trị phù hợp với tôi trong câu trả lời này .
Tobias

2

Tôi không thể nhận được bất kỳ phông chữ nào khác mà tôi đã cài đặt để hiển thị trong trình chỉnh sửa Windows GVim của mình, vì vậy tôi chỉ chuyển sang phông chữ có Lucida Consolehỗ trợ UTF-8 ít nhất là tốt hơn một chút. Thêm điều này vào cuối _vimrc:

" For making everything utf-8
set enc=utf-8
set guifont=Lucida_Console:h9:cANSI
set guifontwide=Lucida_Console:h12

Bây giờ tôi thấy ít nhất một số ký tự UTF-8.


trong trường hợp của tôi cANSI phải được thay đổi để cGREEK (Edit -> Chọn Font ... trong GVim), với font Consolas, để hiển thị một tập tin văn bản được mã hóa UTF-8 với các nhân vật Hy Lạp một cách chính xác
hello_earth

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.