我可以为vim定义自定义编码吗?


9

我经常使用Programming Puzzles和Code-golf。那里的许多用户纯粹是为了打高尔夫球而编写了自定义语言。我什至现在正在独自工作。这些语言中的许多都有自己的自定义编码,因此它们可以将更多命令压缩为一个字节。例如,认真果冻05AB1E

我可以配置vim以使用自己的自定义编码吗?我想配置字节到unicode代码点的映射。例如:

0x01 == "¢"

然后,当我键入时<C-v><C-a>,它将显示一个¢字符,而当我编写时,它将保存byte 0x01

这甚至可以实现吗?而且,这是否可以与系统剪贴板一起正常工作?(例如,我可以从浏览器复制并粘贴到vim,反之亦然)


2
您可能需要编写自己的语法脚本并使用:help conceal
romainl

通过查看Vim帮助encodingcharconvert我发现它在内部尝试首先使用该iconv函数转换字符集。iconv可以处理不同字符集之间的转换。在此处iconv可以找到有关如何添加字符集的答案(似乎您必须邮寄维护者邮件)。也许这对您有帮助。:)
Erwin Rooijakkers

Answers:


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键入文字unicode,则可以使用以下工作流程:

<C-V> u XXXX

XXXXunicode值在哪里,因此<C-V>u0001^A根据需要插入。


如果要验证文件的内容,建议使用xxd可以拥有的文件的十六进制转储。

例如

$ vim

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

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

您可以在此处看到您的^Aas 01和您的^Bas 02。(0a代表文件末尾的新行)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.