我正在为个人笔记创建一个日志应用程序,并在我的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}但不幸的是,我认为这两个过程都是作为后台进程打开的。
我一直在引用"6 Ways to Run Shell Commands in Ruby“。
发布于 2012-06-14 03:23:39
与在article you referenced中一样,Vim在当前进程内的子subshell中运行命令,但真正的问题是它也试图从命令运行中获取输出,这在`中不起作用。
您可以执行以下任一操作:
exec用新进程替换当前进程(请注意,一旦调用exec,Ruby/Rake进程就会结束,并且在它运行之后什么也不会运行)。system创建一个类似Vim s的子subshell,但避免了试图获取`的stdout的问题。与exec不同的是,在Vim终止后,ruby会继续运行。发布于 2019-05-08 00:59:33
您需要将tty作为退格键等的标准输入传递,才能在vim中正常工作:
exec("</dev/tty vim a b")很明显,反引号(`)不起作用,但我在脚本中使用system/exec时遇到了问题。
首先我得到Vim: Warning: Input is not from a terminal,然后当我使用backspace时我看到了^?。
https://stackoverflow.com/questions/11021456
复制相似问题