我写了一个函数来获取光标下当前文件的完整路径
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不会?
您可以使用:execute构建ex命令字符串并执行它:
:exe "e ".GetFullPath()
Run Code Online (Sandbox Code Playgroud)
或者使用``=`语法扩展Vim表达式:
:e `=GetFullPath()`
Run Code Online (Sandbox Code Playgroud)
如果你检查了:edit和的帮助:echo,你会发现前者希望它的参数是文件名(字面意思),而:echo期望一个将被评估的表达式.