我正在尋找一種方法來檢索在vim中輸入的內容並將其加載到ruby變量中。將vim緩衝區加載到ruby變量中
用戶類型:
myProgram -m
這時,Vim出現。只要用戶退出Vim,「myProgram」就會檢索用戶的輸入。
我試圖做一些事情(幼稚)
message = `vim`
不過,我得到 「Vim:警告:輸出不是到終端」
非常感謝您
我正在尋找一種方法來檢索在vim中輸入的內容並將其加載到ruby變量中。將vim緩衝區加載到ruby變量中
用戶類型:
myProgram -m
這時,Vim出現。只要用戶退出Vim,「myProgram」就會檢索用戶的輸入。
我試圖做一些事情(幼稚)
message = `vim`
不過,我得到 「Vim:警告:輸出不是到終端」
非常感謝您
當Vim裏面,你可以運行:%!your_program
並且你的程序將被當前緩衝區調用,因爲它是stdin。
你應該看看「visudo」,「vipw」...命令如何管理它(在Linux上)。
您應該只需要將您的數據寫出到臨時文件名,然後運行如system(ENV["EDITOR"], tmpfile)
,然後再讀tmpfile
。我建議使用EDITOR或VISUAL環境變量,人們將它們設置爲程序的首選編輯器使用(即如果有人更喜歡Emacs並且甚至不能退出Vim,他們不會感到困惑)。
如果你可以用gVim的或工作的MacVim,您可以使用-f
標誌:
-f or --nofork Foreground: Don't fork when starting GUI
應用程序(無論是gvim的或的MacVim)運行時,這將使你的Ruby代碼暫停。
抓取編輯器的內容有點複雜,但是可以通過代碼預先創建臨時文件作爲存根,並在啓動時將其傳遞給Vim來輕鬆處理。編輯離開,保存緩衝區,然後退出編輯器。當控制權返回到Ruby時,再次打開文件並將其內容讀入變量。
如果您將環境EDITOR
設置爲vim,並編輯命令行或讓SVN將其用於svn diff
命令,您會注意到發生在Linux上。
通過反引號執行會啓動一個沒有控制終端的子shell,VIM需要它來完成基於文本的GUI。然而,爲了獲得vim和ruby之間的對決,你可以讓ruby寫出一個臨時文件,指向vim,然後在vim退出之後重新把文件塞滿。 – 2011-02-22 20:09:25
非常感謝,我會這樣做的。 – ms123 2011-02-22 20:14:46