^ @符号在vim中

Pno*_*tNP 6 vim file-io

当我在vim中查看我的文件时,会出现以下符号.

---<snip>----
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@fstalone
---<snip>-----
Run Code Online (Sandbox Code Playgroud)

我创建的文件是通过重定向stdoutstderr我的实用程序,如下所示:#./my_util > util.log 2>&1.这个文件往往会变得非常庞大(~4 MB)

  1. 这个符号是什么?
  2. 如何摆脱它?

voi*_*hos 17

这是一个空字符,格式(Vim使用很多,你可能已经注意到了)称为插入符号.基本上,不知何故,你的文件中充满了零个字节.

由于我们不知道您的实用程序在做什么,如果它是罪魁祸首,如果您希望我们提供帮助,您需要向我们展示一些代码.否则,如果您只想从文件中删除字符,请使用替换:

%s/<Ctrl-V><Ctrl-J>//g
Run Code Online (Sandbox Code Playgroud)

Ctrl-V标志着转义序列的开始.按下之后Ctrl-J,您应该看到^@出现在您的命令中.因此,正如您猜测的那样,Ctrl-V, Ctrl-J是null字符的一个转义序列.

  • 输入它的另一种方法:`CTRL-K,N,U`按照`:help digraph-table` (4认同)
  • CTRL-V CTRL-2仅适用于标准QWERTY键盘.CTRL-V CTRL-J适用于带有V和J的任何键盘布局. (2认同)
  • @voithos:^ J是换行符,但Vim在内部将换行符存储为NULL(可能是处理Mac/Win/Linux换行符约定的一种方式).关于这个有一些描述:help NL-used-for-Nul(http://vimdoc.sourceforge.net/htmldoc/pattern.html#NL-used-for-Nul) (2认同)
  • @DrAl:实际上 NULL 字符存储为换行符(`0x0a`)。不是相反的。 (2认同)

Win*_*ing 11

以上都不适合我。我有一个文件,其中一些行末尾带有“^@”,我想替换它。我设法通过使用以下命令搜索“[\x0]”来替换它:

%s/[\x0]//g
Run Code Online (Sandbox Code Playgroud)

我希望它可以节省某人一个小时的生命。这里有一个解释,等我不那么忙的时候我会回去阅读: A Discussion with a betterterpretation