本文简要介绍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 Readline.completion_case_fold用法及代码示例
- Ruby Readline.completion_append_character =用法及代码示例
- Ruby Readline.readline用法及代码示例
- Ruby Readline.point用法及代码示例
- Ruby Readline模块用法及代码示例
- Ruby Regexp named_captures()用法及代码示例
- Ruby Recorder类用法及代码示例
- Ruby Regexp to_s()用法及代码示例
- Ruby Regexp.eql?用法及代码示例
- Ruby Regexp hash()用法及代码示例
- Ruby Resolution.new用法及代码示例
- Ruby Regexp.fixed_encoding?用法及代码示例
- Ruby Resolver.resolve用法及代码示例
- Ruby Regexp类用法及代码示例
- Ruby Regexp.options用法及代码示例
- Ruby Refinement.import_methods用法及代码示例
- Ruby Regexp inspect()用法及代码示例
- Ruby Regexp.inspect用法及代码示例
- Ruby Regexp.names用法及代码示例
- Ruby Resolution.require_nested_dependencies_for用法及代码示例
- Ruby Requirement.parse用法及代码示例
- Ruby Regexp source()用法及代码示例
- Ruby Resolution.possibility用法及代码示例
- Ruby Regexp match()用法及代码示例
- Ruby Regexp.rxp =~ str用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Readline.completion_proc =。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。