zsh安裝自動補全外掛incr
阿新 • • 發佈:2019-02-01
使用zsh的自動補全功能,首先滿足下面的條件:
-
你用 oh-my-zsh 來協助你完成 zsh 的配置
-
你開啟了 zsh
-
你下載了這個 外掛
-
你把外掛執行shell 寫到了你的 .zshrc 配置檔案中
上面說到的 1,2 在之前的博文裡面早,最上面其實我貼出來如何開啟 zsh 的連結.(如果你沒有滑鼠的話,肯定點不開)
今天就是分享下 3,4 提到的內容:
如何下載這個外掛:
點開後你的第一反應應該是一個F開頭的單詞蹦出來,我當時也是.
我下載的版本是 incr-0.2.zsh
如果某一天這個官網由於種種原因你訪問不到了…所以我把 incr-0.2.zsh 的指令碼貼出來一份就當備份
# Incremental completion for zsh # by y.fujii <y-fujii at mimosa-pudica.net>, public domain autoload -U compinit zle -N self-insert self-insert-incr zle -N vi-cmd-mode-incr zle -N vi-backward-delete-char-incr zle -N backward-delete-char-incr zle -N expand-or-complete-prefix-incr compinit bindkey -M viins '^[' vi-cmd-mode-incr bindkey -M viins '^h' vi-backward-delete-char-incr bindkey -M viins '^?' vi-backward-delete-char-incr bindkey -M viins '^i' expand-or-complete-prefix-incr bindkey -M emacs '^h' backward-delete-char-incr bindkey -M emacs '^?' backward-delete-char-incr bindkey -M emacs '^i' expand-or-complete-prefix-incr unsetopt automenu compdef -d scp compdef -d tar compdef -d make compdef -d java compdef -d svn compdef -d cvs # TODO: # cp dir/ now_predict=0 function limit-completion { if ((compstate[nmatches] <= 1)); then zle -M "" elif ((compstate[list_lines] > 6)); then compstate[list]="" zle -M "too many matches." fi } function correct-prediction { if ((now_predict == 1)); then if [[ "$BUFFER" != "$buffer_prd" ]] || ((CURSOR != cursor_org)); then now_predict=0 fi fi } function remove-prediction { if ((now_predict == 1)); then BUFFER="$buffer_org" now_predict=0 fi } function show-prediction { # assert(now_predict == 0) if ((PENDING == 0)) && ((CURSOR > 1)) && [[ "$PREBUFFER" == "" ]] && [[ "$BUFFER[CURSOR]" != " " ]] then cursor_org="$CURSOR" buffer_org="$BUFFER" comppostfuncs=(limit-completion) zle complete-word cursor_prd="$CURSOR" buffer_prd="$BUFFER" if [[ "$buffer_org[1,cursor_org]" == "$buffer_prd[1,cursor_org]" ]]; then CURSOR="$cursor_org" if [[ "$buffer_org" != "$buffer_prd" ]] || ((cursor_org != cursor_prd)); then now_predict=1 fi else BUFFER="$buffer_org" CURSOR="$cursor_org" fi echo -n "\e[32m" else zle -M "" fi } function preexec { echo -n "\e[39m" } function vi-cmd-mode-incr { correct-prediction remove-prediction zle vi-cmd-mode } function self-insert-incr { correct-prediction remove-prediction if zle .self-insert; then show-prediction fi } function vi-backward-delete-char-incr { correct-prediction remove-prediction if zle vi-backward-delete-char; then show-prediction fi } function backward-delete-char-incr { correct-prediction remove-prediction if zle backward-delete-char; then show-prediction fi } function expand-or-complete-prefix-incr { correct-prediction if ((now_predict == 1)); then CURSOR="$cursor_prd" now_predict=0 comppostfuncs=(limit-completion) zle list-choices else remove-prediction zle expand-or-complete-prefix fi }
如何使用?
首先去你官網或者從上面把這個 shell 檔案內容copy 下來,然後放到一個指定的目錄下.
該放到什麼目錄下,這個看你的個人愛好,我推薦你放在 oh-my-zsh 目錄的外掛目錄下
➜ /Users/zhangzhi >.oh-my-zsh/plugins/
然後新建一個 incr 目錄,最後在 incr 目錄下建立一個shell 文件,把你copy 的內容放進去.
上面的操作有幾個注意點: 建立資料夾用sudo
許可權.
建立完的 shell 文件要給賦777
許可權.
➜ /Users/zhangzhi/.oh-my-zsh/plugins/incr git:(master) ✗ >ls
上面就是我放置 incr 外掛的目錄.
然後是配置 .zshrc 檔案:
➜ /Users/zhangzhi >nano .zshrc
然後插入一句下面的 shell 指令碼:
source ~/.oh-my-zsh/plugins/incr/incr*.zsh
我把她放在了配置檔案最下方.
請注意上面的路徑地址,你要改成你的 incr*.zsh 所在的目錄
然後儲存 .zshrc 配置檔案,這時如果你想讓它立即生效
➜ /Users/zhangzhi >source .zshrc
這樣就可以了.其他 shell 視窗可以關閉重新開啟及有了補全提示.
它不僅僅是對指令的補全,而且也會補全路徑,檔名,最重要的是實時的,掌握好你的 tab 鍵,去飛吧!