我正在寻找一种方法来检索已在vim中输入的内容并将其加载到ruby变量中。
用户类型:
myProgram -m
然后Vim出现。每当用户退出Vim时,“myProgram”将检索用户的输入。
我尝试做某事(天真)
message = `vim`
但是,我得到“Vim:警告:输出不是终端”
非常感谢
答案 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上)。