2012-06-13 46 views
4

我创造了个人笔记日记应用程序,并在下面我Rakefile从Rakefile打开Vim?

task :new do 
    entry_name = "Entries/#{Time.now.to_s.gsub(/[-\ :]+/, '.').gsub(/.0500+/,'')}.md" 
    `touch #{entry_name}` 
    `echo "# $(date)" >> #{entry_name}` 
end 

最后一部分,我想包括是Vim的文本编辑器打开,但我无法弄清楚如何打开它就好像我直接从bash终端打电话一样。

我曾尝试:

vim #{entry_name} 

但不幸的是,我认为这两个的打开它作为后台进程。

我一直在引用“6 Ways to Run Shell Commands in Ruby”。

+1

我很惊讶'执行'不工作,因为它应该。当你使用这种方法会发生什么? –

+0

脚本刚刚结束,我回到bash提示符。 Vim没有留下'.entry_name.swap'文件,所以我不相信这个程序在任何地方都存在。 – rudolph9

+0

@AndrewMarshall等待......'exec“vim #entry_name”'确实有效!瓦纳把这个答案放在一个答案中,我会检查它。 – rudolph9

回答

9

正如article you referenced`的磨合在当前进程内壳层的命令,但真正的问题是,它试图从运行的命令的输出为好,不打漂亮Vim的。

您可以:

  • 使用exec取代当前进程与新的(注意了Ruby /耙过程将结束,一旦你叫exec,并且之后没有它会跑)。

  • 使用system来创建子shell,如` s,但是避免了试图抓取Vim的stdout的问题。与exec不同,在Vim终止后,Ruby将继续。