ZSH搜索函数定义

3

有没有一种机制可以在控制台上获取函数定义,而不必手动搜索文件?

我正在寻找一种快速查找已知函数名称定义的方法。

例如,我想知道“_kill”自动完成函数的定义在哪里。

在Ruby中,使用pry,我可以得到以下内容:

show-method find

来自:app/models/search/object.rb@ line 2:

行数:7

def self.find(conditions = {}, options = {})
  type = extract_object_type
  raise 'do not call Search::Object directly' if type == 'Object'
  search_logic = "Search::#{type.camelize}Logic".constantize.new(conditions, options)
  search_logic.process!
  search_logic.execute
end
2个回答

5

对我来说,以下工作可行:

$ autoload +X _kill # important step
$ whence -v _kill
_kill is a shell function from /usr/share/zsh/5.2/functions/_kill

Zsh文档 - 9.1 自动加载函数

要加载自动加载函数myfunc的定义而不执行myfunc,请使用:

autoload +X myfunc

autoload +X之后,您还可以使用whence -f查看实际函数。

$ whence -f _kill
_kill () {
    local curcontext="$curcontext" line state ret=1
    typeset -A opt_args
    _arguments -C '(-s -l 1)-n[specify signal number]:signal number' '(-n -l 1)-s[specify signal name]:signal:_signals -s' '(-n -s)-l[list signal names or numbers of specified signals]:*:signal:_signals' '(-n -s -l)1::signal:_signals -p -s' '*:processes:->processes' && ret=0
    if [[ -n "$state" ]]
    then
        local pgrp='process-groups:: _wanted '
        [[ -n "$opt_args[(i)-[ns]]${${(@)line:#--}}" && -prefix - ]] && pgrp+='-x '
        pgrp+="process-groups expl 'process-group' compadd - 0"
        _alternative 'processes:: _pids' 'jobs:: _jobs -t' $pgrp && ret=0
    fi
    return ret
}

有些人可能会发现等效的内置函数 type _killfunctions _kill 更容易记忆。 - darw
太好了!我能以某种方式为别名做到这一点吗? - xeruf

2
对于zsh,可以尝试使用whence -ftype -f命令。例如:
myhost% whence -f _kill
_kill () {
    # undefined
    builtin autoload -XUz
}

12
有没有办法找到定义这个函数的位置?例如,实际的文件是什么? - gprasant

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