我想从文件路径中提取信息并将其作为替代字符串的一部分使用,绞尽脑汁,多次尝试并且只发现了以下作品
let spd = split(expand('%:p'),"/")
%s/to_be_replaced/\=spd[-2]/g
我想将两个命令合并为一个
%s/to_be_replaced/\=split(expand('%:p',"/"))[-2]/g
但它不起作用。由于我在制表符模式下处理多个文件,因此这两个命令方法实际上非常不方便。此外,它不符合要求,因为
%s/to_be_replaced/some_string\=spd[-2]more_string/g
也错了。所以我想知道是否有解决方案或更快的方法来做到这一点?
答案 0 :(得分:3)
尝试其他分隔(例如@
)
%s@to_be_replaced@\=split(expand('%:p'),'/')[-2]@g
如果要嵌入expr内部字符串:
%s@to_be_replaced@\=printf('some_string%smore_string', spd[-2])@g
答案 1 :(得分:0)
除非你为多个缓冲区调用它(:bufdo
等),否则缓冲区的表达式常量。因此,您可以通过<C-r>=
:%s/to_be_replaced/<C-r>=split(expand('%:p'),"/")[-2]<CR>/g
:help sub-replace-expression
注意:分隔字符不得出现在表达式中! 考虑使用像“@”或“:”这样的字符。
正如kev所指出的那样,你可以使用任何其他单字节字符,但不能使用字母数字字符''','''或'|'。