Могу ли я определить пользовательскую кодировку для vim?

9

Я часто использую Пазлы для программирования и Code-golf . Многие пользователи написали собственные языки исключительно для игры в гольф. Я даже сейчас работаю самостоятельно. Многие из этих языков имеют свои собственные кодировки, чтобы они могли объединять больше команд в один байт. Например, серьезно , желе и 05AB1E .

Могу ли я настроить vim для использования моей собственной пользовательской кодировки? Я хотел бы настроить отображение байтов на кодовые точки Unicode. Например:

0x01 == "¢"

Затем, когда я печатаю <C-v><C-a>, он отображает ¢символ, а когда я пишу, он сохраняет байт 0x01.

Возможно ли это хотя бы отдаленно? А также, будет ли это хорошо работать с системным буфером обмена? (например, я могу копировать и вставлять из моего браузера в Vim и наоборот)

Джеймс
источник
2
Вам, вероятно, потребуется написать собственный синтаксический скрипт и использовать его :help conceal.
Ромен
Глядя на помощь Vim для encodingи charconvertя увидел , что он внутренне пытается использовать iconvфункцию первого для преобразования наборов символов. iconvможет обрабатывать преобразования между различными наборами символов. Ответ о том, как добавить набор символов, iconvможно найти здесь (кажется, вам нужно отправить письмо сопровождающему). Может быть, это поможет вам. :)
Эрвин Ройяккерс

Ответы:

7

Как предложил romainl, вы можете добиться этого с помощью concealфункции vim.

Вот пример сценария, который можно использовать:

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представляет новую строку в конце файла)

nobe4
источник