5

私は個人的なメモ用のジャーナル アプリケーションを作成しており、次の内容を に持っています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}

残念ながら、どちらもバックグラウンドプロセスとして開いていると思います。

「 Rubyでシェルコマンドを実行する6つの方法」を参照してきました。

4

2 に答える 2

10

参照した記事のように、現在のプロセス内のサブシェル`でコマンドを実行しますが、実際の問題は、コマンド実行からの出力も取得しようとしていることであり、Vim ではうまく機能しません。

次のいずれかを実行できます。

  • 現在のプロセスを新しいプロセスに置き換えるために使用execします (Ruby/Rake プロセスは を呼び出すと終了し、その後は何も実行されないことに注意してください)。exec

  • systems のようなサブシェルを作成するために使用します`が、Vim の stdout を取得しようとする問題を回避します。とは異なりexec、Vim が終了した後、Ruby は続行します。

于 2012-06-13T19:23:39.050 に答える