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

Tom*_*aps 3 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
Run Code Online (Sandbox Code Playgroud)

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

:echo GetFullPath()
Run Code Online (Sandbox Code Playgroud)

E:\测试\ test.h

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

:e GetFullPath()
Run Code Online (Sandbox Code Playgroud)

Vim只是创建一个名为GetFullPath()的新文件

为什么命令:e将按字面意思处理函数调用,而命令:echo不会?

sid*_*yll 6

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

:exe "e ".GetFullPath()
Run Code Online (Sandbox Code Playgroud)

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

:e `=GetFullPath()`
Run Code Online (Sandbox Code Playgroud)

如果你检查了:edit和的帮助:echo,你会发现前者希望它的参数是文件名(字面意思),而:echo期望一个将被评估的表达式.