Function 用于删除ctrl字符的Vim函数
不幸的是,我必须查看嵌入了大量控制字符的文件,例如一些网络和应用程序日志。不必费心找一个合适的查看器并想在VIM中删除它们 我开始编写一个函数,一个接一个地删除它们,目的是在十六进制或unicode字符列表正常工作后,对其进行while循环 奇怪的事情正在发生。在第一个文件中,我尝试了该函数,文件中有33000个Function 用于删除ctrl字符的Vim函数,function,vim,Function,Vim,不幸的是,我必须查看嵌入了大量控制字符的文件,例如一些网络和应用程序日志。不必费心找一个合适的查看器并想在VIM中删除它们 我开始编写一个函数,一个接一个地删除它们,目的是在十六进制或unicode字符列表正常工作后,对其进行while循环 奇怪的事情正在发生。在第一个文件中,我尝试了该函数,文件中有33000个^@和2000个^M function! CleanCtrlChar() "Remove Ctrl Chars from file eg where ^ @ is CtrlQ-
^@
和2000个^M
function! CleanCtrlChar()
"Remove Ctrl Chars from file eg where ^ @ is CtrlQ-@
:%s/^ @//ge
:%s/^ M//ge
endfunction
执行下面的snippet函数时,会报告在调用时删除约2300个^@
和小于1000个^M
,但实际上不会删除那么多。从命令行%s/^@//ge
删除所有33000
将:%s/^@//ge
更改为:%s/^@//ge
实际上会将引用的匹配数替换为空格
编辑:
计算出,即使使用:execute%s/^@//g
,在函数中也可以不使用任何内容替换\%x00
,这与使用命令行时的效果不同。不知道为什么容易避免
仍然需要找出为什么该函数不能替换所有匹配项
:编辑
为什么函数报告它删除了匹配项,但删除的内容少于它报告的内容
为什么函数不删除所有匹配项?它的解析与命令行不同吗?看起来像是vimscript错误。一个笨拙的解决方法是将它们转换为文件中找不到的字符串,然后将其转换为“”