V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
kamushin
V2EX  ›  Linux

Oh-my-zsh 里自带了很多以_开头的函数,是做什么用的?

  •  
  •   kamushin · 2015-05-18 15:56:25 +08:00 · 5158 次点击
    这是一个创建于 3455 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如我输入gradle按下TAB,自动补全成了_gradle,回车后得到这个
    _arguments:comparguments:312: can only be called from completion function。
    这个补全有什么作用和意义吗?
    第 1 条附言  ·  2015-05-18 17:26:14 +08:00
    我在zsh文档中找到这样的描述 those beginning ‘_’ are called by the completion code. The shell functions of this set, which implement completion behaviour and may be bound to keystrokes, are referred to as ‘widgets’. These proliferate as new completions are required.

    那是否意味着_开头的函数不应该直接调用呢? 既然这样为何会被自动补全出来?
    为什么我没有load这个插件,但是还是自动补全了这个命令?
    11 条回复    2015-05-19 08:23:55 +08:00
    dsdshcym
        1
    dsdshcym  
       2015-05-18 16:01:51 +08:00
    只在补全的时候用的, _ 开头表示 private
    kamushin
        2
    kamushin  
    OP
       2015-05-18 16:03:19 +08:00
    @dsdshcym 能给个文档链接吗?Google了好久不知道该怎么描述这个问题来找文档。
    582033
        3
    582033  
       2015-05-18 16:22:44 +08:00
    按照一般的思维来猜,也是private
    kamushin
        4
    kamushin  
    OP
       2015-05-18 16:31:29 +08:00
    @582033 private代表我不能直接在shell里用?那为什么要出现在补全列表里?
    kamushin
        5
    kamushin  
    OP
       2015-05-18 16:36:17 +08:00
    @dsdshcym 我看到_gradle是在gradle这个plugin里,但是我再.zshrc里并没有load这个plugin,为什么还是出现在我的补全列表里了?
    jun4rui
        6
    jun4rui  
       2015-05-18 17:45:30 +08:00
    所以要多看看别的语言的代码,_这个貌似是Python里面来的吧?结果很多地方现在都在用,例如js
    kamushin
        7
    kamushin  
    OP
       2015-05-18 17:46:59 +08:00
    @jun4rui Python里_开头的可以被调用 = =
    dsdshcym
        8
    dsdshcym  
       2015-05-18 18:16:55 +08:00
    @kamushin 猜的 = =
    能被调用也可以是 private 嘛,只是约定
    jun4rui
        9
    jun4rui  
       2015-05-18 19:46:52 +08:00
    @kamushin 要假装看不见的!呵呵。

    不过我也不知道出处是哪里,有解惑的兄弟吗?在车上没法动用Google为自己解惑了
    keroro520
        10
    keroro520  
       2015-05-18 20:08:42 +08:00
    `_gradle`跟gradle插件好像没什么关系...`_gradle`是在/usr/share/zsh/functions/Completion/Unix 目录下的函数。

    看样子似乎是oh-my-zsh.sh里面compinit自动载入了$fpath的下的函数作为补全...作者偷懒,直接把$fpath全载入了。
    kamushin
        11
    kamushin  
    OP
       2015-05-19 08:23:55 +08:00
    @keroro520 原来是这样。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2745 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 127ms · UTC 14:33 · PVG 22:33 · LAX 07:33 · JFK 10:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.