Vim去除空白命令为何删除百分号?跨平台差异问题咨询
跨平台异常的核心原因
问题出在Vim的'magic'配置差异,导致正则表达式里的%解析逻辑不一样:
Unix服务器端Vim:默认开启
magic模式(nocompatible模式下的默认设置),此时正则中的%是特殊字符,会匹配行的开头或结尾(因为你的正则里%在模式末尾,实际匹配行尾)。所以%s/\s\+%//e的作用是删除行尾的空白字符,不会碰代码中间的空格+%组合,因此运行正常。Windows端Vim:
magic模式被关闭(可能是兼容模式启用,或版本/默认配置差异),此时%被当作普通字符处理。\s\+%会直接匹配「一个或多个空白字符紧跟%」的组合,所以运行Trim命令时,会把printf("Testing %2f")里的%删掉,变成Testing 2f。
另外补充:你的Trim函数本意应该是清理行尾空白,但正则写错了——正确的行尾锚点是$,把正则改成%s/\s\+$//e,就能在所有平台上稳定工作,彻底避免这种跨平台差异。
内容的提问来源于stack exchange,提问作者catfriendly
相关产品推荐
相关产品推荐

