将vim缓冲区加载到ruby变量中

时间:2011-02-22 20:06:07

标签: ruby vim

我正在寻找一种方法来检索已在vim中输入的内容并将其加载到ruby变量中。

用户类型:

myProgram -m

然后Vim出现。每当用户退出Vim时,“myProgram”将检索用户的输入。

我尝试做某事(天真)

message = `vim`

但是,我得到“Vim:警告:输出不是终端”

非常感谢

4 个答案:

答案 0 :(得分:2)

当在vim内部时,你可以运行:%!your_program并使用当前缓冲区调用your_program,因为它是stdin。

答案 1 :(得分:1)

你应该只需要将你的数据写到临时文件名,然后运行类似system(ENV["EDITOR"], tmpfile)的内容,然后再读回tmpfile。我建议使用EDITOR或VISUAL环境变量,人们将这些设置为首选编辑器以供程序使用(即如果有人更喜欢Emacs,甚至不能退出Vim,他们就不会感到困惑)。

答案 2 :(得分:1)

如果您可以使用gVim或MacVim,则可以使用-f标记:

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

这将使您的Ruby代码在应用程序(gvim或MacVim)运行时暂停。

抓取编辑器的内容有点复杂,但可以通过代码预先创建临时文件作为存根来轻松处理,并在启动时将其传递给Vim。编辑,保存缓冲区,然后退出编辑器。当控制返回Ruby时再次打开文件并将其内容读入变量。

如果您将环境EDITOR变量设置为vim,并且编辑命令行或告诉SVN将其用于其svn diff命令,您会注意到在Linux上发生的事情。

答案 3 :(得分:0)

你应该看看“visudo”,“vipw”...命令如何管理它(在linux上)。