Vim字符串拼接异常:为何拼接结果仅显示第一个变量?
Vim拼接URL与分支字符串后执行shell命令仅显示URL内容的原因及解决方法
问题根源是拼接后的字符串未做shell转义处理。你定义的url包含:、/这类shell特殊字符,直接通过exec '!echo '.result执行时,Vim会把字符串原封不动传给shell,shell会解析这些特殊字符,导致后续的branch内容被错误处理(比如被判定为命令的其他部分,或者在解析流程中被截断)。
解决方法很简单,用Vim自带的shellescape()函数对拼接结果转义,确保shell将其视为完整的单个参数:
let result = url . branch exec '!echo ' . shellescape(result)
也可以手动用双引号包裹拼接后的字符串(但转义函数能适配所有特殊字符场景,更可靠):
let result = url . branch exec '!echo "'.result.'"'
为什么单独输出branch、把branch放前面拼接都正常?因为branch本身不含shell特殊字符,不会触发shell的错误解析逻辑;而url在前时,特殊字符打乱了shell对参数的识别,才导致后续内容无法正常输出。
内容的提问来源于stack exchange,提问作者Jin
相关产品推荐
相关产品推荐

