如何在Vim中使用split()函数以"."作为分隔符?
解决Vim脚本中
split()用"."分隔返回空数组的问题 哦,这个坑我踩过!问题出在Vim的split()函数第二个参数默认是正则表达式模式,而.在正则语法里是匹配任意单个字符的通配符——你直接用"."当分隔符,相当于把输入字符串里的每一个字符都当成分隔符,拆分后自然就只剩下空数组了。
正确的解决方法
要让.被当成普通的点号处理,你需要对它进行正则转义:
- 如果用单引号包裹字符串,直接写
'\.'即可(单引号在Vim脚本里是原义字符串,不需要额外转义反斜杠) - 如果用双引号包裹,需要把反斜杠也转义,写成
"\\."
举个实际的脚本例子:
" 用单引号的写法(推荐,更简洁) let input_str = 'expr.expr' let result = split(input_str, '\.') echo result " 输出: ['expr', 'expr'] " 用双引号的写法 let input_str = "expr.expr" let result = split(input_str, "\\.") echo result " 同样输出: ['expr', 'expr']
为什么其他字符(比如",")能正常工作?
因为,这类字符在正则表达式里不属于特殊元字符,所以直接作为分隔符时,Vim会把它当成普通字符处理,自然就能正确拆分字符串啦。
内容的提问来源于stack exchange,提问作者Renji
相关产品推荐
相关产品推荐

