<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Read Sean

    Read me, read Sean.
    posts - 508, comments - 655, trackbacks - 9, articles - 4

    [Tips] DIY制表符鍵自動補全(bash)

    Posted on 2009-06-01 00:11 laogao 閱讀(4087) 評論(1)  編輯  收藏 所屬分類: Computer Usage 、GNU/Linux
    各位童鞋們過節好啊,今天給大家帶來的是在bash中DIY制表符鍵自動補全。

    bash是大多數主流Linux發行版的默認shell,如果你用過bash,那么一定會接觸到<tab>鍵自動補全的這個方便的功能,當你一個命令的頭幾個字符敲下去,按下<tab>,如果以此開頭的命令只有1個, bash會直接幫你補全,如果有多個,則會有相應提示,而在后續的參數輸入時,也會帶有默認的自動補全文件路徑的功能。當你習慣了<tab>,很難想象沒有自動補全的日子會是什么樣子。

    bash默認支持常見的補全功能,如可執行命令、文件路徑等,如果安裝了bash-completion包,甚至連chown, man, svn, ssh這些也會帶有相應的自動補全提示,而不是單純的文件路徑補全。好奇的你一定想知道是怎么實現的吧,其實很簡單,我們舉個例子來說:

    假定你有一個命令,叫做abc,它又有自己的子命令,分別是build_all、compile和update,其中compile這個子命令需要的參數必須來自project.list這個文件中列出的值,怎么實現<tab>自動補全,讓bash知道abc的合法子命令和compile子命令的合法參數列表呢?

    在你的~/.bashrc或者任何一個啟動bash時會被執行的文件中加入下面的代碼:

    function _abc() {
        COMPREPLY=()
        local cur=${COMP_WORDS[COMP_CWORD]};
        local com=${COMP_WORDS[COMP_CWORD-1]};
        case $com in
        'abc')
            COMPREPLY=($(compgen -W 'build_all compile update' -- $cur))
            ;;
        'compile')
            local pro=($(awk '{print $1}' project.list))
            COMPREPLY=($(compgen -W '${pro[@]}' -- $cur))
            ;;
        *)
            ;;
        esac
        return 0
    }

    complete -F _abc abc

    手動載入一下,或者重啟bash,再敲abc命令,即可自動補全子命令,如果子命令是compile,還能自動補全相應的參數值。我們來簡單分析一下這段代碼。首先我們定義一個function _abc,這個函數先清空自動補全列表,根據當前輸入位置前一個token判斷目前需要自動補全的語境,如果是abc,則將自動補全內容設置為'build_all'、'compile'和'update',如果是'compile',則將project.list文件內容輸出到補全列表,當然,這里我們也可以換成其他任何必要的方式。最后我們通過complete -F _abc abc將這段自動補全邏輯注冊到abc這個主詞上。這樣當我們敲abc時,后續內容就能自動補全了。

    Enjoy!

    Feedback

    # re: [Tips] DIY制表符鍵自動補全(bash)  回復  更多評論   

    2009-09-29 18:48 by http://bbs2.chinaunix.net/thread-1587745-1-1.html
    博主,請問這是你原創的嗎?
    我想要實現這一個功能,請問怎么辦?
    http://bbs2.chinaunix.net/thread-1587745-1-1.html
    主站蜘蛛池模板: 亚洲AV无码AV男人的天堂不卡| 内射少妇36P亚洲区| 亚洲精品一卡2卡3卡四卡乱码| 69视频在线是免费观看| 国产亚洲精品国产| a级片在线免费看| 亚洲乱码国产乱码精品精| 99精品视频在线观看免费| 亚洲国产精品VA在线看黑人| 国产午夜精品免费一区二区三区 | 日本永久免费a∨在线视频| 免费国产综合视频在线看| 免费无遮挡无码视频在线观看| 免费一级e一片在线播放| 国产精品免费αv视频| 亚洲成av人在线视| 91九色视频无限观看免费| www.亚洲成在线| 日韩免费电影在线观看| 色爽黄1000部免费软件下载| 在线A亚洲老鸭窝天堂| 99蜜桃在线观看免费视频网站| 亚洲日本国产精华液| 麻豆成人精品国产免费| 五月天婷婷免费视频| 亚洲成在人线av| 国产无人区码卡二卡三卡免费 | 久久亚洲国产成人影院| 热99re久久精品精品免费| 免费国产va视频永久在线观看| 中文字幕亚洲一区二区三区| 69国产精品视频免费| 亚洲а∨精品天堂在线| 精品国产人成亚洲区| 最近免费中文字幕mv在线电影| 亚洲国产欧美国产综合一区| 亚洲真人日本在线| 成人在线免费看片| 一级毛片一级毛片免费毛片| 亚洲精品国产成人中文| 免费成人午夜视频|