2015-05-18 58 views

回答

7

要執行一個外部命令和捕獲其在Vim可變輸出,使用system()

:let hostname = system('hostname') 

該命令是通過配置'shell'調用;只要你的Bash腳本有適當的shebang行(#!/bin/bash),一切都應該沒問題。

如果你最終想要插入輸出到當前緩衝區,則可以選擇直接使用:read !{cmd}

:read !hostname 
1

作爲一個替代方法,注意let語句的默認簽名是:

let {var} = {expr} 

其中右側必須是表達式。這意味着let無法捕獲execute命令的輸出。換句話說,嘗試:

let {var} = {cmd} 

將產生一個錯誤。一種解決方法是使用redir命令,該命令的語法如下:

redir => {var} 
{cmd} 
redir end 

讓我們來看看它是如何工作的實踐。首先嚐試:

let somevar = echo "The current locale settings are: " . v:lang 

返回錯誤E15:無效的表達。現在用:

redir => somevar 
echo "The current locale settings are: " . v:lang 
redir end 

錯誤消失,且變量被成功地分配,這是由打印其值驗證:

echo somevar 

與輸出:

The current locale settings are: en_US.UTF-8