Tôi có thể xác định một mã hóa tùy chỉnh cho vim không?


9

Tôi thường xuyên sử dụng Câu đố lập trình và Code-golf . Rất nhiều người dùng ở đó đã viết các ngôn ngữ tùy chỉnh hoàn toàn cho việc chơi gôn. Tôi thậm chí đang tự làm việc ngay bây giờ. Rất nhiều ngôn ngữ này có bảng mã tùy chỉnh riêng để chúng có thể squish nhiều lệnh hơn vào một byte. Ví dụ, nghiêm túc , thạch05AB1E .

Tôi có thể định cấu hình vim để sử dụng mã hóa tùy chỉnh của riêng mình không? Tôi muốn định cấu hình ánh xạ byte tới các điểm mã unicode. Ví dụ:

0x01 == "¢"

Sau đó, khi tôi gõ <C-v><C-a>, nó sẽ hiển thị một ¢ký tự và khi tôi viết, nó sẽ lưu byte 0x01.

Điều này thậm chí có thể từ xa có thể? Và ngoài ra, điều này sẽ làm việc tốt với bảng tạm hệ thống? (ví dụ: tôi có thể sao chép và dán từ trình duyệt của mình sang vim và ngược lại)


2
Bạn có thể sẽ cần phải viết kịch bản cú pháp của riêng bạn và sử dụng :help conceal.
romainl

Bằng cách nhìn vào trợ giúp của Vim encodingcharconverttôi thấy rằng bên trong nó cố gắng sử dụng iconvchức năng này trước tiên để chuyển đổi các bộ ký tự. iconvcó thể xử lý chuyển đổi giữa các bộ ký tự khác nhau. Một câu trả lời về cách thêm một bộ ký tự iconvcó thể được tìm thấy ở đây (có vẻ như bạn phải gửi thư cho người bảo trì). Có lẽ điều này giúp bạn. :)
Erwin Rooijakkers

Câu trả lời:


7

Như romainl đề xuất, bạn có thể đạt được điều đó với concealtính năng của vim.

Dưới đây là một ví dụ về kịch bản có thể được sử dụng:

let rules = [
      \ ['01' , '☺'],
      \ ['02' , '☻'],
      \ ['03' , '♥'],
      \ ['04' , '♦'],
      \ ['05' , '♣'],
      \ ['06' , '♣'],
      \ ['07' , '•'],
      \ ['08' , '◘'],
      \ ['^A' , '¢'],
      \ ]

for [value, display] in rules
  execute "syntax match vartest /".value."/ conceal cchar=".display
endfor

" Ensure the character is concealed
set conceallevel=2
set concealcursor=nvc

Như bạn có thể thấy, tôi lấy một số ánh xạ nghiêm túc^Aví dụ của bạn . Cẩn thận nếu bạn muốn sao chép / dán mã này, ^Acần phải gõ <C-v> <C-A>.

Mã này làm gì, nó xác định cho mỗi value/ displayghép một cú pháp khớp.

ví dụ

syntax match vartest /08/ conceal cchar=◘

Sẽ phù hợp với mọi 08trình tự và tập tin và che giấu chúng với nhân vật.

Bạn sẽ thấy , nhưng văn bản thực tế trong tập tin là 08.


Sau đó, bạn có thể lấy một danh sách các quy tắc và (với một macro ưa thích, nghĩa là nghiêm túc 0i\ ['^[f s', '^[lxf)s'],^[ld$:) chuyển đổi từng dòng thành một mảng vim có thể sử dụng.

Ngoài ra, nếu bạn muốn nhập unicode bằng chữ với vim, bạn có thể sử dụng quy trình công việc này:

<C-V> u XXXX

Ở đâu XXXXlà giá trị unicode, vì vậy gõ <C-V>u0001sẽ chèn ^Anhư mong muốn.


Nếu bạn muốn xác minh nội dung của tệp, tôi khuyên bạn nên sử dụng kết xuất hex của tệp, mà bạn có thể có với xxd .

ví dụ

$ vim

<C-V><C-A><C-V><C-B>
:x a.txt

$ xxd a.txt
0000000: 0102 0a                                  ...

Bạn có thể thấy ở đây ^Anhư 01của bạn và ^Bnhư là của bạn 02. ( 0ađại diện cho dòng mới ở cuối tập tin)

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.