Чи можу я визначити спеціальне кодування для vim?


9

Я часто використовую головоломки для програмування та код-гольф . Багато користувачів там написали власні мови виключно для гольфу. Я навіть зараз працюю над собою. Багато цих мов мають власні спеціальні кодування, щоб вони могли стискати більше команд в один байт. Наприклад, серйозно , желе і 05AB1E .

Чи можу я налаштувати vim на використання власного власного кодування? Я хотів би налаштувати відображення байтів на unicode кодові точки. Наприклад:

0x01 == "¢"

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

Це можливо навіть віддалено? А також, чи добре це буде працювати із буфером обміну системи? (наприклад, я можу скопіювати та вставити зі свого браузера у vim та навпаки)


2
Ймовірно, вам потрібно буде написати власний синтаксичний скрипт і використовувати :help conceal.
romainl

Переглянувши довідку 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є значення Unicode, тому введення тексту <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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.