Vim函数删除ctrl字符

时间:2015-02-18 05:12:36

标签: function vim

不幸的是,我必须查看嵌入了大量控制字符的文件,例如一些网络和应用程序日志。无法找到合适的查看者并希望在VIM中删除它们。

我开始编写一个函数来逐个删除它们,目的是在它运行时将一个while循环舍入一个hex或unicode字符列表。

发生了奇怪的事情。在第一个文件中,我尝试了该函数,文件中有33000 ^@和2000 ^M

function!  CleanCtrlChar()
    "Remove Ctrl Chars from file eg where ^ @ is CtrlQ-@
    :%s/^ @//ge
    :%s/^ M//ge
endfunction

执行下面的代码片段,报告在调用时删除~2300 ^@和少于1000 ^M,但实际上并没有删除那么多。从命令行%s/^@//ge删除所有33000。

:%s/^ @//ge更改为:%s/^ @/ /ge实际上会将引用的匹配数替换为空格。

编辑:

尽管使用\%x00替换:execute %s/^@//g没有任何功能在函数中的作用与命令行不同。不确定为什么容易避免。

仍然需要解决为什么函数不能替换所有匹配项。

:EDIT

为什么函数报告它删除了匹配但删除的内容少于报告?

为什么函数不会删除所有匹配项?它的解析方式与命令行不同吗?

0 个答案:

没有答案