如何在Vim脚本中使用'^ @'?

时间:2010-11-15 18:14:22

标签: special-characters vim

我正在尝试解决在Vim脚本中使用^ @(即<ctrl-@>)字符的问题。我可以将它们插入到脚本中,但是当脚本运行时,似乎该行在^ @所在的位置被截断。

到目前为止,我的kludgy解决方案是将^ @存储在变量中,然后在我引用文字^ @时引用脚本中的变量。谁能告诉我这里发生了什么?有没有更好的解决这个问题的方法?

2 个答案:

答案 0 :(得分:5)

这就是为什么我从不在脚本中使用原始特殊字符值的原因之一。虽然^@不起作用,但映射中的字符串<C-@>仍按预期工作,因此您可以使用其中一个

nnoremap <C-@> {rhs}
nnoremap <Nul> {rhs}

很奇怪,但你不能在这里使用<Char-0x0>。关于字符串中空字节的一些注释:

  1. 将空字节插入字符串会截断它:vim使用以空字节结尾的旧C样式strigs,因此它不能出现在字符串中。这些字符串效率非常低,因此如果要生成非常大的文本,请尝试将其累积到行列表中(使用setline非常快,因为缓冲区表示为行列表)。
  2. 返回字符串列表的大多数函数(例如readfilegetline(start, end))或获取字符串列表(例如writefilesetlineappend\n(NL)为Null。它也是缓冲线的内部表示,请参阅:h NL-used-for-Nul
  3. 如果您尝试在命令行中插入\n字符,则会显示Null(但这实际上是换行符)。如果要编辑文件名中包含\n的文件(可以在* nix上),则需要使用反斜杠添加换行符。

答案 1 :(得分:2)

字节ctrl-@也称为'\0'。许多语言,程序等将它用作“字符串结束”标记,因此vim在那里混淆并不奇怪。如果你必须在脚本字符串的中间使用这个字节,听起来你的解决方法是一个不错的。