vimのカスタムエンコーディングを定義できますか?


9

私はプログラミングパズルとコードゴルフを頻繁に使用しています。あちこちの多くのユーザーが、純粋にゴルフのためのカスタム言語を書いています。今は自分で作業しています。これらの言語の多くには独自のカスタムエンコーディングがあり、より多くのコマンドを1バイトに圧縮できます。たとえば、真剣にゼリー05AB1E

独自のカスタムエンコーディングを使用するようにvimを構成できますか?Unicodeのコードポイントへのバイトのマッピングを構成したいと思います。例えば:

0x01 == "¢"

次に、と入力<C-v><C-a>すると¢文字が表示され、書き込むとバイトが保存されます0x01

これはリモートでも可能ですか?また、これはシステムクリップボードでうまく機能しますか?(たとえば、ブラウザからvimにコピーして貼り付けることができます)


2
おそらく、独自の構文スクリプトを記述して使用する必要があります:help conceal
romainl 2016年

以下のためのVimのヘルプを見てencodingcharconvert、それは内部的に使用しようとすることを私が見たiconv文字セットを変換するために、最初の関数を。iconv異なる文字セット間の変換を処理できます。文字セットを追加する方法への答えがiconv見つけることができるここに(あなたがメンテナを郵送しなければならないようです)。多分これはあなたを助けるでしょう。:)
Erwin Rooijakkers 2016年

回答:


7

romainlが提案したように、concealvim の機能を使用してこれを実現できます。

以下は、使用できるスクリプトの例です。

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配列に変換できます。

また、vimでリテラルユニコードを入力する場合は、次のワークフローを使用できます。

<C-V> u XXXX

XXXXUnicode値はどこにあるので、入力<C-V>u0001する^Aと必要に応じて挿入されます。


ファイルの内容を確認したい場合は、ファイルの16進ダンプを使用することをお勧めします。これはxxd取得できます。

例えば

$ vim

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

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

ここであなたの^Aas 01とyour ^Basを見ることができます02。(0aファイルの最後の新しい行を表します)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.