当我在 vim 中查看我的文件时,会出现以下符号。
---<snip>----
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@fstalone
---<snip>-----
我创建的文件是通过重定向我的实用程序的
stdout
和stderr
,像这样:#./my_util > util.log 2>&1
。这个文件往往会变得非常大(~4 MB)
这就是 null 字符,其格式(Vim 经常使用这种格式,您可能已经注意到)称为 caret notation。基本上,您会以某种方式将充满零的字节放入文件中。
由于我们不知道您的实用程序在做什么,如果它是罪魁祸首,如果您希望我们提供帮助,您需要向我们展示一些代码。否则,如果您只想从文件中删除字符,请使用替换:
%s/<Ctrl-V><Ctrl-J>//g
Ctrl-V
标记转义序列的开始。同样按下 Ctrl-J
后,您应该会看到 ^@
出现在您的命令中。因此,正如您所猜测的那样,Ctrl-V, Ctrl-J
是空字符的一个转义序列。
以上都不适合我。我在一些要替换的行的末尾有一个带有“^@”的文件。我设法通过使用以下方法搜索 '[\x0]' 来替换它:
%s/[\x0]//g
我希望它能为某人节省一个小时的生命。 这里有个解释,等我不忙的时候再回去看: 有更好解释的讨论
^@ 当你尝试在 vim 中打开一个非文本文件时出现。例如,如果您打开一个 exe 文件或图像文件,将显示 ^@,这是一个不可读的字符。尝试在其他编辑器中打开文件并查看结果