Vim için özel bir kodlama tanımlayabilir miyim?


9

Programlama Bulmacaları ve Kod Golf'ü sık sık kullanıyorum . Orada birçok kullanıcı sadece golf için özel diller yazdı. Şu an bile kendi başıma çalışıyorum. Bu dillerin birçoğunun kendi özel kodlamaları vardır, böylece daha fazla komutu tek bir bayta bölerler. Örneğin, cidden , jöle ve 05AB1E .

Vim'i kendi özel kodlamamı kullanacak şekilde yapılandırabilir miyim? Baytların unicode kod noktalarına eşlenmesini yapılandırmak istiyorum. Örneğin:

0x01 == "¢"

Sonra, yazdığımda <C-v><C-a>, bir ¢karakter görüntüleyecek ve yazdığımda baytı koruyacaktı 0x01.

Bu uzaktan bile mümkün mü? Ve ayrıca, bu sistem panosu ile iyi çalışır mı? (örneğin, tarayıcımdan vim ve tersine kopyalayıp yapıştırabilirim)


2
Muhtemelen kendi sözdizimi betiğinizi yazmanız ve kullanmanız gerekir :help conceal.
romainl

Vim yardımına bakarak encodingve charconvertdahili olarak iconvkarakter setlerini dönüştürmek için işlevi kullanmaya çalıştığını gördüm . iconvfarklı karakter kümeleri arasındaki dönüştürme işleyebilir. Bir karakter setinin nasıl ekleneceğine dair bir cevap buradaiconv bulunabilir (bakıcıyı postalamanız gerekiyor gibi görünüyor). Belki bu size yardımcı olur. :)
Erwin Rooijakkers

Yanıtlar:


7

Romainl'in önerdiği gibi, concealvim özelliği ile bunu başarabilirsiniz .

Kullanılabilecek bir komut dosyası örneği:

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

Gördüğünüz gibi, bazı ciddi haritalamayı ve ^Aörneğinizi aldım . Bu kodu kopyalamak / yapıştırmak istiyorsanız dikkatli ^Aolunmalıdır <C-v> <C-A>.

Bu kodun yaptığı, her value/ displayçift ​​için bir sözdizimi eşleşmesi tanımlamaktır .

Örneğin

syntax match vartest /08/ conceal cchar=◘

Her 08diziyi ve dosyayı eşleştirecek ve karakteri ile gizleyecektir .

Sen edecektir bkz ama dosyadaki asıl metindir 08.


Daha sonra kuralların bir listesini alabilir ve (süslü bir makro ile, yani ciddi olarak 0i\ ['^[f s', '^[lxf)s'],^[ld$) her satırı kullanılabilir bir vim dizisine dönüştürebilirsiniz.

Ayrıca, vim ile değişmez unicode yazmak istiyorsanız, bu iş akışını kullanabilirsiniz:

<C-V> u XXXX

Burada XXXXyazarak böylece Unicode değerdir <C-V>u0001ekler ^Aarzu edildiği gibi.


Dosyanın içeriğini doğrulamak istiyorsanız, xxd ile sahip olabileceğiniz dosyanın onaltılık dökümünü kullanmanızı öneririm .

Örneğin

$ vim

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

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

Sen senin burada görebilirsiniz ^Aolarak 01ve sizin ^Bkadar 02. ( 0adosyanın sonundaki yeni satırı temsil eder)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.