如何在vi中使用十六进制或八进制代码输入非ASCII字符


33

我正在尝试为后记写一个高尔夫球库。但是它本身必须被压缩。因此,我需要一种方便的方法来在大多数ascii文本中键入任意字节。

我知道可以使用任何一种编程语言轻松完成此操作,但是我可以在vi中做到吗?(:help octal没有帮助)。

编辑:这是为postscript生成的高尔夫球库。幸运的是,我很早就意识到打高尔夫球图书馆本身是一个愚蠢的主意,但我没有这么做。


7
如果有Vim,可能会有所帮助
sr_

Answers:


15

我假设您使用vim,因为这是vim的命令。在某些系统上,它只是一个以vi兼容模式运行的符号链接。 :helpoctalvivim

在vim中:

  • 您可以从可以使用的基本多语言平面输入Unicode字符:
    ctrl+ v,然后输入四位数的十六进制Unicode代码。
  • 另一个选择是有向图。您可以在vim的帮助(help: dig)中阅读有关它们的更多信息。
    ctrl+ k,然后按两个字符的顺序。
    您可以列出vim usig命令支持的序列:digraph

在nvi,vi和其他地方:

  • Ctrl+ Shift并点击U,然后输入unicode十六进制代码。

3
我认为这Ctrl+V是为了输入十进制数字,如果不紧随其后x

3
@Carlos是正确的。这个答案是错误的。艾伦的答案是正确的。
马兰'18

60
:help i_CTRL-V_digit

在插入模式下,键入Ctrl+,V然后键入

  • 十进制数(0-255)
  • o 然后是一个八进制数(o0-o377,即255是最大值)
  • x 然后是十六进制数字(x00-xFF,即255是最大值)
  • u 然后是一个4进制字符Unicode序列
  • U 然后是一个8进制字符Unicode序列

十进制和八进制数限制为三位数。小于100的十进制数可能包含前导零,这些零将被忽略。八进制数小于100 (即,64)可以包括前导零,但它们不是必需的。八进制数大于或等于100 十月 可能包括前导零(但你可以键入一个领先的o,如果你愿意的话)。

您可以通过键入不是该基数的有效数字的字符来终止数字。例如,

  • Ctrl+ V    065 →  A
  • Ctrl+ V    65B →  Ab
  • Ctrl+ Vo041 →  !
  • Ctrl+ Vo419 →  !9

常规(一个八位字节)十六进制数限制为两位数。与上面一样,您可以为十六进制代码指定的字符重复基数字符(例如  Ctrl+ Vuu0041 →  A)。  o 并且  x不区分大小写。


要添加更多提示:小数位数必须在0-255之间。x00-xFF之间的十六进制数。
wisbucky

ascii esaple是ctrl + v x1b(用于ascii颜色序列)
ThorSummoner

1
提醒您,如果您在Windows中,并且将Ctrl + V重映射到“粘贴”,则可以在插入模式下使用Ctrl + Q代替它。见stackoverflow.com/questions/426896/...
克里斯河唐纳利
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.