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

3
假设我在Ruby中有以下代码:
print("Enter a filename:")
editableprint("untitled.txt")
filename = gets.chomp!

如果想让"untitled.txt"成为用户输入gets函数的一部分,那么"editableprint"函数应该是什么样的呢?(这样用户就可以编辑"untitled.txt"字符串,或者保留原样)


这是一个令人意外地困难的问题。要么使用File.readFile.write以及gets.chomp,要么只需使用常规文本编辑器... - max pleaner
2个回答

0

我会使用vim编辑文件。Vim将保存编辑后的文件在~/.viminfo中。最后编辑的文件标记为'0。文件条目的模式是'N N N 文件名,其中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")

0

这里有类似的问题在这里在这里

然而,那里的解决方案似乎不能按预期工作,所以看起来这是Ruby版本或平台相关的吗?

例如,这个对我不起作用,但也不会报错。

require "readline"

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

但是由于它看起来更好,并且应该按照 Ruby >= 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}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接