在Ruby中打印可编辑到控制台

时间:2016-08-20 06:31:48

标签: ruby io console

假设我在Ruby中有以下代码:

print("Enter a filename:")
editableprint("untitled.txt")
filename = gets.chomp!

“editableprint”函数是什么,以便“untitled.txt”是获取函数的用户输入的一部分? (因此用户可以编辑“untitled.txt”字符串或只是保持原样“)

2 个答案:

答案 0 :(得分:0)

我会用vim来编辑文件。 Vim会在~/.viminfo中保存已编辑的文件。最后编辑的文件标有'0。文件条目的模式是'N N N filename,其中N代表整数。

def editableprint(filename)
  system "vi #{filename}"
  regex = /(?<='0\s{2}\d\s{2}\d\s{2}).*/
  viminfo = File.expand_path("~/.viminfo")
  File.read(viminfo).scan(regex).first
end

为了使其正常工作,您必须更改代码

print("Enter a filename:")
filename = gets.chomp!
filename = "untitled.txt" if filename.emtpy?
edited_filename = editableprint("untitled.txt")

答案 1 :(得分:0)

类似问题herehere

然而,那里的解决方案似乎没有按预期工作,所以看起来这是ruby版本还是平台依赖?

例如,对我有效,但也不会引发错误。

require "readline"

filename = Readline.insert_text("untitled.txt").readline("Enter a filename:")
print filename

但是因为它看起来好多了,而且应该根据ruby&gt; = 2的文档工作,我现在就把它留在那里。

以下适用于我的系统(ruby 2.3.1,OS X)

require "readline"
require 'rb-readline'

module RbReadline
  def self.prefill_prompt(str)
    @rl_prefill = str
    @rl_startup_hook = :rl_prefill_hook
  end

  def self.rl_prefill_hook
    rl_insert_text @rl_prefill if @rl_prefill
    @rl_startup_hook = nil
  end
end

RbReadline.prefill_prompt("untitled.txt")
str = Readline.readline("Enter a filename:", true)

puts "You entered: #{str}"