ฉันสามารถกำหนดการเข้ารหัสแบบกำหนดเองสำหรับกลุ่มได้หรือไม่


9

ฉันใช้Programming Puzzles และ Code-golfบ่อยครั้ง ผู้ใช้จำนวนมากที่นั่นได้เขียนภาษาที่กำหนดเองเพื่อการเล่นกอล์ฟอย่างแท้จริง ฉันยังทำงานด้วยตัวเองตอนนี้ ภาษาเหล่านี้จำนวนมากมีการเข้ารหัสที่กำหนดเองเพื่อให้พวกเขาสามารถบีบคำสั่งเพิ่มเติมเป็นไบต์เดียว ยกตัวอย่างเช่นอย่างจริงจัง , เจลลี่และ05AB1E

ฉันสามารถกำหนดค่ากลุ่มเพื่อใช้การเข้ารหัสแบบกำหนดเองของฉันได้หรือไม่ ฉันต้องการกำหนดค่าการจับคู่ไบต์เป็นยูนิโค้ดโค้ด - พอยต์ ตัวอย่างเช่น:

0x01 == "¢"

จากนั้นเมื่อฉันพิมพ์<C-v><C-a>ก็จะแสดงตัวอักษรและเมื่อฉันเขียนมันจะประหยัดไบต์¢0x01

เป็นไปได้จากระยะไกลหรือไม่ และจะใช้งานได้ดีกับคลิปบอร์ดของระบบหรือไม่ (เช่นฉันสามารถคัดลอกและวางจากเบราว์เซอร์ของฉันไปเป็นกลุ่มและในทางกลับกัน)


2
:help concealคุณอาจจะต้องเขียนสคริปต์ไวยากรณ์ของคุณเองและการใช้งาน
romainl

โดยดูที่ความช่วยเหลือเป็นกลุ่มencodingและcharconvertฉันเห็นว่ามันพยายามใช้iconvฟังก์ชันภายในก่อนเพื่อแปลงชุดอักขระ iconvสามารถจัดการการแปลงระหว่างชุดตัวละครที่แตกต่างกัน คำตอบเกี่ยวกับวิธีเพิ่มชุดอักขระที่iconvสามารถพบได้ที่นี่ (ดูเหมือนว่าคุณต้องส่งผู้ดูแลทางไปรษณีย์) บางทีนี่อาจช่วยคุณได้ :)
Erwin Rooijakkers

คำตอบ:


7

ตามที่แนะนำ romainl คุณสามารถทำได้ด้วยconcealคุณสมบัติของเสียงเรียกเข้า

นี่คือตัวอย่างสคริปต์ที่สามารถใช้:

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

อย่างที่คุณเห็นฉันได้ทำแผนที่และ^Aตัวอย่างของคุณอย่างจริงจัง ระวังหากคุณต้องการที่จะคัดลอก / วางรหัสนี้จะต้องพิมพ์^A<C-v> <C-A>

สิ่งที่รหัสนี้ทำคือมันกำหนดสำหรับการจับคู่ไวยากรณ์แต่ละคู่value/display

เช่น

syntax match vartest /08/ conceal cchar=◘

จะจับคู่ทุก08ลำดับและไฟล์และปกปิดด้วยอักขระ

คุณจะเห็น แต่ข้อความจริงในแฟ้มเป็น08


จากนั้นคุณสามารถใช้รายการกฎและ (ด้วยมาโครแฟนซีเช่นสำหรับจริงจัง:) 0i\ ['^[f s', '^[lxf)s'],^[ld$แปลงแต่ละบรรทัดให้เป็นอาร์เรย์ vim ที่ใช้งานได้

นอกจากนี้หากคุณต้องการพิมพ์ unicode ด้วยตัวอักษร vim คุณสามารถใช้เวิร์กโฟลว์นี้:

<C-V> u XXXX

XXXXค่ายูนิโค้ดอยู่ที่ไหนการพิมพ์จึง<C-V>u0001จะแทรก^Aตามที่ต้องการ


หากคุณต้องการที่จะตรวจสอบเนื้อหาของไฟล์ที่ผมแนะนำให้ใช้การถ่ายโอนข้อมูลฐานสิบหกของไฟล์ที่คุณสามารถมีกับxxd

เช่น

$ vim

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

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

คุณสามารถดูที่นี่ของคุณ^Aเป็น01ของคุณและเป็น^B 02( 0aแทนบรรทัดใหม่ที่ท้ายไฟล์)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.