我可以在vim中的替换字符串中使用多个函数

时间:2013-10-15 01:15:12

标签: vim

我想从文件路径中提取信息并将其作为替代字符串的一部分使用,绞尽脑汁,多次尝试并且只发现了以下作品

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

也错了。所以我想知道是否有解决方案或更快的方法来做到这一点?

2 个答案:

答案 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所指出的那样,你可以使用任何其他单字节字符,但不能使用字母数字字符''','''或'|'。

相关问题