Bisakah saya mendefinisikan penyandian khusus untuk vim?

9

Saya sering menggunakan Programming Puzzles dan Code-golf . Banyak pengguna di sana telah menulis bahasa khusus untuk bermain golf. Saya bahkan mengerjakan sendiri sekarang. Banyak dari bahasa ini memiliki penyandian khusus mereka sendiri sehingga mereka dapat menambahkan lebih banyak perintah ke dalam satu byte Misalnya, serius , jelly dan 05AB1E .

Bisakah saya mengonfigurasi vim untuk menggunakan penyandian khusus saya sendiri? Saya ingin mengonfigurasi pemetaan byte ke unicode-point-point. Sebagai contoh:

0x01 == "¢"

Kemudian, ketika saya mengetik <C-v><C-a>, itu akan menampilkan ¢karakter, dan ketika saya menulis, itu akan menghemat byte 0x01.

Apakah ini bahkan mungkin? Dan juga, apakah ini akan bekerja dengan baik dengan clipboard sistem? (misalnya, saya dapat menyalin dan menempel dari browser saya ke vim dan sebaliknya)

James
sumber
2
Anda mungkin perlu menulis skrip sintaks Anda sendiri dan menggunakannya :help conceal.
romainl
Dengan melihat bantuan Vim encodingdan charconvertsaya melihat bahwa itu secara internal mencoba menggunakan iconvfungsi pertama untuk mengonversi set karakter. iconvdapat menangani konversi antara rangkaian karakter yang berbeda. Jawaban untuk cara menambahkan set karakter ke iconvdapat ditemukan di sini (tampaknya Anda harus mengirim pengelola). Mungkin ini membantu Anda. :)
Erwin Rooijakkers

Jawaban:

7

Seperti yang disarankan romainl, Anda dapat mencapainya dengan concealfitur vim.

Berikut ini contoh skrip yang dapat digunakan:

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

Seperti yang Anda lihat, saya mengambil beberapa pemetaan serius dan ^Acontoh Anda . Hati-hati jika ingin menyalin / menempel kode ini, ^Aperlu diketik <C-v> <C-A>.

Apa yang dilakukan kode ini adalah, ia menentukan untuk setiap value/ displaymemasangkan suatu sintaks yang cocok.

misalnya

syntax match vartest /08/ conceal cchar=◘

Akan mencocokkan setiap 08urutan dan file dan menyembunyikannya dengan karakter.

Anda akan melihat , tetapi teks sebenarnya dalam file tersebut adalah 08.


Anda kemudian dapat mengambil daftar aturan dan (dengan makro mewah, yaitu untuk serius:) 0i\ ['^[f s', '^[lxf)s'],^[ld$mengubah setiap baris menjadi array vim yang dapat digunakan.

Juga, jika Anda ingin mengetikkan unicode literal dengan vim, Anda bisa menggunakan alur kerja ini:

<C-V> u XXXX

Di mana XXXXnilai unicode, jadi mengetik <C-V>u0001akan memasukkan ^Aseperti yang diinginkan.


Jika Anda ingin memverifikasi konten file, saya sarankan menggunakan hex dump file, yang bisa Anda miliki dengan xxd .

misalnya

$ vim

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

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

Anda dapat melihat di sini ^Asebagai 01Anda dan ^Bsebagai Anda 02. ( 0amewakili baris baru di akhir file)

nobe4
sumber