我正在尝试解决在Vim脚本中使用^ @(即<ctrl-@>
)字符的问题。我可以将它们插入到脚本中,但是当脚本运行时,似乎该行在^ @所在的位置被截断。
到目前为止,我的kludgy解决方案是将^ @存储在变量中,然后在我引用文字^ @时引用脚本中的变量。谁能告诉我这里发生了什么?有没有更好的解决这个问题的方法?
答案 0 :(得分:5)
这就是为什么我从不在脚本中使用原始特殊字符值的原因之一。虽然^@
不起作用,但映射中的字符串<C-@>
仍按预期工作,因此您可以使用其中一个
nnoremap <C-@> {rhs}
nnoremap <Nul> {rhs}
很奇怪,但你不能在这里使用<Char-0x0>
。关于字符串中空字节的一些注释:
setline
非常快,因为缓冲区表示为行列表)。readfile
,getline(start, end)
)或获取字符串列表(例如writefile
,setline
,append
) \n
(NL)为Null。它也是缓冲线的内部表示,请参阅:h NL-used-for-Nul
。\n
字符,则会显示Null(但这实际上是换行符)。如果要编辑文件名中包含\n
的文件(可以在* nix上),则需要使用反斜杠添加换行符。答案 1 :(得分:2)
字节ctrl-@
也称为'\0'
。许多语言,程序等将它用作“字符串结束”标记,因此vim在那里混淆并不奇怪。如果你必须在脚本字符串的中间使用这个字节,听起来你的解决方法是一个不错的。