ZSH 搜索函数定义

ast*_*nic 3 shell zsh

是否有一种机制可以从控制台获取函数定义而无需手动 grep 文件?

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

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

在 ruby​​ 中使用 pry 我可以得到这样的东西:

显示方法查找

来自:app/models/search/object.rb @ 第 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
Run Code Online (Sandbox Code Playgroud)

Hot*_*hke 5

对我来说以下作品:

\n\n
$ autoload +X _kill # important step\n$ whence -v _kill\n_kill is a shell function from /usr/share/zsh/5.2/functions/_kill\n
Run Code Online (Sandbox Code Playgroud)\n\n

Zsh 文档 \xe2\x80\x93 9.1 自动加载函数

\n\n
\n

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

\n\n

autoload +X myfunc

\n
\n\n

之后autoload +X你还可以看到实际的功能whence -f

\n\n
$ whence -f _kill\n_kill () {\n    local curcontext="$curcontext" line state ret=1\n    typeset -A opt_args\n    _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\n    if [[ -n "$state" ]]\n    then\n        local pgrp=\'process-groups:: _wanted \'\n        [[ -n "$opt_args[(i)-[ns]]${${(@)line:#--}}" && -prefix - ]] && pgrp+=\'-x \'\n        pgrp+="process-groups expl \'process-group\' compadd - 0"\n        _alternative \'processes:: _pids\' \'jobs:: _jobs -t\' $pgrp && ret=0\n    fi\n    return ret\n}\n
Run Code Online (Sandbox Code Playgroud)\n