假设我在Ruby中有以下代码:
print("Enter a filename:")
editableprint("untitled.txt")
filename = gets.chomp!
“editableprint”函数是什么,以便“untitled.txt”是获取函数的用户输入的一部分? (因此用户可以编辑“untitled.txt”字符串或只是保持原样“)
答案 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)
然而,那里的解决方案似乎没有按预期工作,所以看起来这是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}"