2011-02-22 32 views
0

我正在尋找一種方法來檢索在vim中輸入的內容並將其加載到ruby變量中。將vim緩衝區加載到ruby變量中

用戶類型:

myProgram -m 

這時,Vim出現。只要用戶退出Vim,「myProgram」就會檢索用戶的輸入。

我試圖做一些事情(幼稚)

message = `vim` 

不過,我得到 「Vim:警告:輸出不是到終端」

非常感謝您

+0

通過反引號執行會啓動一個沒有控制終端的子shell,VIM需要它來完成基於文本的GUI。然而,爲了獲得vim和ruby之間的對決,你可以讓ruby寫出一個臨時文件,指向vim,然後在vim退出之後重新把文件塞滿。 – 2011-02-22 20:09:25

+0

非常感謝,我會這樣做的。 – ms123 2011-02-22 20:14:46

回答

2

當Vim裏面,你可以運行:%!your_program並且你的程序將被當前緩衝區調用,因爲它是stdin。

0

你應該看看「visudo」,「vipw」...命令如何管理它(在Linux上)。

1

您應該只需要將您的數據寫出到臨時文件名,然後運行如system(ENV["EDITOR"], tmpfile),然後再讀tmpfile。我建議使用EDITOR或VISUAL環境變量,人們將它們設置爲程序的首選編輯器使用(即如果有人更喜歡Emacs並且甚至不能退出Vim,他們不會感到困惑)。

1

如果你可以用gVim的或工作的MacVim,您可以使用-f標誌:

-f or --nofork Foreground: Don't fork when starting GUI 

應用程序(無論是gvim的或的MacVim)運行時,這將使你的Ruby代碼暫停。

抓取編輯器的內容有點複雜,但是可以通過代碼預先創建臨時文件作爲存根,並在啓動時將其傳遞給Vim來輕鬆處理。編輯離開,保存緩衝區,然後退出編輯器。當控制權返回到Ruby時,再次打開文件並將其內容讀入變量。

如果您將環境EDITOR設置爲vim,並編輯命令行或讓SVN將其用於svn diff命令,您會注意到發生在Linux上。