当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Readline.completion_proc =用法及代码示例


本文简要介绍ruby语言中 Readline.completion_proc = 的用法。

用法

completion_proc = proc

指定 Proc 对象 proc 以确定完成行为。它应该接受输入字符串并返回一个完成候选数组。

如果 proc 为 nil,则使用默认完成。

传递给 Proc String 取决于 Readline.completer_word_break_characters 属性。默认情况下,光标下的单词被传递给 Proc 。例如,如果输入是 “foo bar” 那么只有 “bar” 会被传递给完成 Proc

成功完成后, Readline.completion_append_character 将附加到输入中,以便用户可以开始处理他们的下一个参数。

例子

完成静态列表

require 'readline'

LIST = [
  'search', 'download', 'open',
  'help', 'history', 'quit',
  'url', 'next', 'clear',
  'prev', 'past'
].sort

comp = proc { |s| LIST.grep(/^#{Regexp.escape(s)}/) }

Readline.completion_append_character = " "
Readline.completion_proc = comp

while line = Readline.readline('> ', true)
  p line
end

完成目录内容

require 'readline'

Readline.completion_append_character = " "
Readline.completion_proc = Proc.new do |str|
  Dir[str+'*'].grep(/^#{Regexp.escape(str)}/)
end

while line = Readline.readline('> ', true)
  p line
end

自动完成策略

使用 auto-complete 时,有些策略效果很好。要获得一些想法,您可以查看 irb 的completion.rb 文件。

常见的策略是获取可能的完成列表并将其过滤到以用户输入开头的那些完成。在上述示例中,使用了 Enumerator.grep 。输入被转义以防止 Regexp 特殊字符干扰匹配。

使用 Abbrev 库生成补全也可能会有所帮助。

如果 proc 不响应调用方法,则引发 ArgumentError

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Readline.completion_proc =。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。