Ruby 从耙铲上打开Vim?

Ruby 从耙铲上打开Vim?,ruby,rake,Ruby,Rake,我正在为个人笔记创建日记应用程序,并在我的Rakefile中包含以下内容: task :new do entry_name = "Entries/#{Time.now.to_s.gsub(/[-\ :]+/, '.').gsub(/.0500+/,'')}.md" `touch #{entry_name}` `echo "# $(date)" >> #{entry_name}` end 我想包括的最后一部分是Vim文本编辑器的打开,但是我不知道如何打开它,就像我直接从b

我正在为个人笔记创建日记应用程序,并在我的
Rakefile
中包含以下内容:

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}
但不幸的是,我认为这两种方法都将其作为一个后台过程打开

我一直在引用“

就像在,
`
中一样,在当前进程的子shell中运行该命令,但真正的问题是它也试图从命令运行中获取输出,这对Vim来说不太好

您可以:

  • 使用
    exec
    将当前进程替换为新进程(请注意,一旦调用
    exec
    ,Ruby/Rake进程将结束,之后将不会运行任何进程)

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


您需要将tty作为退格等的标准输入进行传递,以便在vim中正常工作:


exec(“我很惊讶
exec
不能正常工作。当您使用该方法时会发生什么?脚本刚刚结束,我返回到bash提示符。Vim没有留下
.entry\u name.swap
文件,所以我不相信程序会在任何地方逗留。@AndrewMarshall等等…
exec“Vim\entry\u name”“
确实有效!!瓦纳把它写在一个答案中,我会检查它。同样,如果您想在使用
vim
后运行ruby代码,请使用
system
而不是
exec