如何在Vim中的:e命令之后获取函数的返回值

时间:2011-12-20 12:49:54

标签: vim

我写了一个函数来获取光标

下当前文件的完整路径
nmap <F12> :echo GetFullPath()<cr>
function! GetFullPath()
    let currentFile=expand("<cfile>")
    let afterChangeSlash=substitute(currentFile,"/","\\","g")
    let fullPath="e:\\Test\\".afterChangeSlash
    return fullPath
endfunction

当我在:echo命令之后调用该函数时,我得到了预期的结果,如:

:echo GetFullPath()

E:\测试\ test.h

但是,当我在:e(编辑)命令之后调用它时:

:e GetFullPath()

Vim只需创建一个名为 GetFullPath()

的新文件

为什么命令:e会在命令:echo不符合字面意义上处理函数调用?

2 个答案:

答案 0 :(得分:5)

您可以使用:execute构建ex命令字符串并执行它:

:exe "e ".GetFullPath()

或使用``=`语法扩展Vim表达式:

:e `=GetFullPath()`

如果你检查:edit:echo的帮助,你会注意到前者希望它的参数是文件名(字面意思),而:echo需要一个表达式将被评估。

答案 1 :(得分:0)

一些ex命令期望得到一个表达式,而另一些命令则期望得到一个字符串。为了使你的工作成功,请使用exec:

nmap <F12> :exec 'e ' . GetFullPath()