我注意到vim中有一些奇怪的行为。如果我这样:
:redir @z
:pwd
:redir END
:reg
我会在我的注册表中看到类似的内容 -
^J^J/home/f41lurizer/workspace^J
^ J是单个字符。根据{{3}},它是一个换行符,带有ascii代码10.现在,根据this wikipedia page,我可以输入一个字符,输入C-v后跟它的ascii代码。如果我进入插入模式并输入
C-v 010
我得到了这个输出:
^@
根据维基百科页面,这是带有ascii代码0的空字符。我尝试用其他字符执行此操作,例如C-v 013将按预期输入^ M字符。
当我重定向ex模式命令时,我在我的寄存器中收到了这个字符,并且它真的弄乱了我,因为它粘贴时的行为非常烦人。我猜我有两个问题。首先,为什么我看到这个奇怪的行为似乎是一个单一的ascii角色?第二个问题是,假设我把它放在我的寄存器中,我怎么能用行为明智的东西代替它,比如^ M?我以为我可以将^ J作为我的分隔符来分割字符串,但如果我甚至不能输入字符,那就很难做到。
编辑:我发现了一些奇怪的东西。我查看了vim digraphs帮助页面,this page on the vim wiki注意到有关LF和NU表示的任何奇怪内容?它们都由^ @表示。我想也许这是同一件事的不同实现,但两个字符的ascii代码两次都是相同的(0)。编辑2:我已经弄明白了如何拆分它。显然,我可以使用null字符作为我的分隔符。尽管如此,我仍然欣赏一些我已经注意到的其他奇怪行为的解释。
编辑3:似乎Vim在内部使用空字符作为表示换行符的方式,然后将它们转换回\ n字符,因为它在内部使用c样式字符串。我想这不是一种奇怪的行为。