क्या मैं विम के लिए एक कस्टम एन्कोडिंग को परिभाषित कर सकता हूं?


9

मैं अक्सर प्रोग्रामिंग पजल्स और कोड-गोल्फ का उपयोग करता हूं । वहाँ उपयोगकर्ताओं के बहुत सारे कस्टम भाषा पूरी तरह से गोल्फ के लिए लिखा है। मैं अभी अपने दम पर काम कर रहा हूं। इन भाषाओं के बहुत सारे अपने स्वयं के कस्टम एनकोडिंग हैं ताकि वे एक ही बाइट में अधिक कमांड स्क्वैश कर सकें। उदाहरण के लिए, गंभीरता से , जेली और 05AB1E

क्या मैं अपने स्वयं के कस्टम एन्कोडिंग का उपयोग करने के लिए विम को कॉन्फ़िगर कर सकता हूं? मैं कोड-अंक यूनिकोड के लिए बाइट्स की मैपिंग कॉन्फ़िगर करना चाहूंगा। उदाहरण के लिए:

0x01 == "¢"

फिर, जब मैं टाइप करता हूं <C-v><C-a>, तो यह एक ¢चरित्र प्रदर्शित करता है, और जब मैं लिखता हूं, तो यह बाइट को बचाएगा 0x01

क्या यह दूर से भी संभव है? और यह भी, यह सिस्टम क्लिपबोर्ड के साथ अच्छी तरह से काम करेगा? (उदाहरण के लिए, मैं अपने ब्राउज़र से vim और इसके विपरीत कॉपी और पेस्ट कर सकता हूं)


2
आपको शायद अपनी खुद की सिंटैक्स स्क्रिप्ट लिखने और उपयोग करने की आवश्यकता होगी :help conceal
रोमेल

के लिए विम मदद को देखकर encodingऔर charconvertमैंने देखा कि यह आंतरिक रूप iconvसे वर्ण सेट को परिवर्तित करने के लिए फ़ंक्शन का उपयोग करने की कोशिश करता है । iconvविभिन्न वर्ण सेटों के बीच रूपांतरण को संभाल सकता है। वर्ण सेट को जोड़ने के तरीके पर एक उत्तर यहांiconv पाया जा सकता है (लगता है कि आपको अनुरक्षक को मेल करना होगा)। शायद इससे आपको मदद मिले। :)
एरविन रूइजाक्कर्स

जवाबों:


7

जैसा कि रोमेल ने सुझाव दिया था, आप इसे 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 के साथ शाब्दिक यूनिकोड लिखना चाहते हैं, तो आप इस वर्कफ़्लो का उपयोग कर सकते हैं:

<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फ़ाइल के अंत में नई लाइन का प्रतिनिधित्व करता है)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.