【问题标题】:Autocomplete strings beginning with an @ (at sign) with Readline in Ruby在 Ruby 中使用 Readline 自动完成以 @(at 符号)开头的字符串
【发布时间】:2011-05-04 06:57:01
【问题描述】:

大家好,我一直在为自动完成和 readline 苦苦挣扎,如果我有这样的一系列选项:

["@lorem", "@ipsum", "#bla", "#meh"]

我在提示符中输入@(at 符号)并按 TAB,它会显示所有选项:

what do you want? > @[TAB] 
@lorem @ipsum #bla #meh

但如果我使用任何其他标志,它会起作用:

what do you want? > #[TAB]
#bla #meh

这是我目前的代码:

  opts = ["@lorem", "@ipsum", "#bla", "#meh"]
  question = "whatever? > "

  Readline.completion_append_character = " "
  Readline.completion_proc = proc { |s| opts.grep( /^#{Regexp.escape(s)}/ ) }

  while value = Readline.readline(question, true)
      exit if value == 'q'
      puts value.chomp.strip
  end
end

有人知道我怎样才能让 Readline 知道 @'s 吗?

【问题讨论】:

  • 你能告诉我们你到目前为止有什么代码吗?
  • 我刚刚用代码更新了帖子,谢谢。

标签: ruby readline


【解决方案1】:

这是由于 @ 符号包含在 readline 识别的分词字符列表中。

您可以从分词字符列表中删除 @ 符号,然后这将起作用。

opts = ["@lorem", "@ipsum", "#bla", "#meh"]
question = "whatever? > "

Readline.basic_word_break_characters = 
    Readline.basic_word_break_characters.delete("@")
Readline.completion_append_character = " "
Readline.completion_proc = proc { |s| opts.grep( /^#{Regexp.escape(s)}/ ) } 

while value = Readline.readline(question, true)
    exit if value == 'q'
    puts value.chomp.strip
end

运行结果如下:-

任何? > #(制表符) #bla #meh 任何? > @(制表符) @lorem @ipsum 任何? > q

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    相关资源
    最近更新 更多