如何用VIM中的当前文件名替换文本?

时间:2012-07-15 13:00:18

标签: file vim replace

我想我的问题不是那么明确,但让我试着在这里解释一下。

假设我打开了一个名为myfilename.java的文件,其中包含以下内容

public class test{
}

现在,我想要的是用test替换myfilename。现在要在vim中获取文件名,我使用:echo expand('%:r')给了我myfilename

现在,我的问题是如何使用上面的输出并用它替换test并将其映射到一个键以供将来使用。我需要的可能是:

:%s/test/above_output_from_command/g

2 个答案:

答案 0 :(得分:11)

您需要添加\=告诉Vim您正在尝试调用函数:

:%s/test/\=expand('%:r')/g

请参阅:help sub-replace-expression

答案 1 :(得分:0)

对于我的应用程序,我最终使用了一个keybound宏(不确定VIM的名称是什么),它完成了我想要的编辑,只是将文件名插入到我想要的地方:

:nmap <F5> 0d$:put =expand('%:p:t')^M0ipackage ^[$a;^[

就我而言,我想插入containsint目录的名称而不是文件,所以我使用了:

:nmap <F5> 0d$:put =expand('%:p:h:t')^M0ipackage ^[$a;^[

0d$删除当前行的内容,:put =expand('%:p:t')^M插入文件名,其余命令编辑命令周围的行以生成类似

的内容

package containing_directory;

在当前行。