2011-12-20 124 views
2

e命令我寫了一個函數當我後調用該函數來獲取光標後如何獲得函數的返回值:在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一個新文件()

爲什麼命令:電子將把一個函數調用字面上,而命令:echo不會呢?

回答

5

您可以使用:execute建立你的前命令字符串並執行它:

:exe "e ".GetFullPath() 

或者使用``=`語法擴展Vim表達式:

:e `=GetFullPath()` 

如果您檢查幫助:edit:echo,你會注意到前者希望它的參數是文件名(字面意思),而:echo需要一個將被評估的表達式。

0

某些ex命令期望得到一個表達式,而另一些ex命令則希望得到一個字符串。爲了使你的情況下使用exec:

nmap <F12> :exec 'e ' . GetFullPath() 
相關問題