1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        Zsh使用心得三則

        發布時間:  2012/8/9 17:24:38

        在每個目錄下,經常用到的命令是不一樣的比如在源碼目錄下常用的是 make xxx ,在配置文件目錄下常用的是 vi xxx …… 這種情況下,每個目錄使用獨立的歷史紀錄就比較方便(似乎有發行版中的 bash 默認如此設置) 實現方式很簡單: 1. 在 $HOME/.zshhistory 目錄下創建與工作目錄層級相同的目錄,并在使用該目錄下的 zhistory 作為歷史紀錄文件 2. 由于切換目錄總是使用 cd 命令,因此在 cd 的時候重新設定 $HISTFILE 變量即可 ($HISTFILE 指定 zsh 使用的歷史紀錄文件)
        # 定義函數,替換原來的 cd
        cd()
        -  {
            builtin cd "$@"                             # 執行原來的 cd 命令
            fc -W                                       # 寫歷史紀錄文件,默認參數為 $HISTFILE 。初始值為 #2 處的定義;執行了 cd 命令后為 #1 處的定義
        # 實際上,你不可能在每個目錄下都執行個把命令,很多目錄你沒有去過,只要為你去過的目錄建立歷史紀錄就可以了
            local HISTDIR="$HOME/.zshhistory$PWD"      # 定義歷史紀錄目錄。每次 cd 后,$PWD 對應與工作目錄層級相同的目錄
                if  [ ! -d "$HISTDIR" ] ; then          # 如果不存在這個目錄,則建立一個
                    mkdir -p "$HISTDIR"
                fi
                export HISTFILE="$HISTDIR/zhistory"     #1 定義歷史紀錄文件 
            touch $HISTFILE                                # 先 touch 一下,如果不存在的話就會新建一個
        # 清空原來的歷史紀錄
            local ohistsize=$HISTSIZE                # 設定一個變量臨時存儲原歷史紀錄大小
                HISTSIZE=0                              # 通過禁用歷史紀錄清空
                HISTSIZE=$ohistsize                     # 重新設定歷史紀錄大小
            fc -R                                       #讀歷史紀錄文件,默認參數為 $HISTFILE  。也就是 #1 處的定義
        }
        # 啟動 zsh 的時候,并沒有執行 cd 命令,因此 $HOME 目錄對應的歷史紀錄目錄可能不存在,先建立它
        mkdir -p $HOME/.zshhistory$PWD
        #2 同樣,啟動 zsh 的時候, 還沒有定義 $HOME 目錄對應的 $HISTFILE ,所以先定義它
        export HISTFILE="$HOME/.zshhistory$PWD/zhistory"

        這樣翻歷史紀錄是方便了,但要查看全部的歷史紀錄可能有點麻煩了

        # 使用 setopt EXTENDED_HISTORY 選項,為命令添加時間戳
        # 這非常重要,匯總到一起的歷史紀錄比較混亂,時間戳是重新排序的依據

        # 定義 allhistory ,將所有的歷史紀錄匯總到一起
        function allhistory { cat $(find $HOME/.zsh_history -name zhistory) }
        # 針對歷史紀錄的格式進行轉換
        function convhistory {
                    sort $1 |         #排序
                    uniq |         #合并相同行。
                                    #由于時間戳精確到秒,所以幾乎不可能有相同的紀錄
                                    #出現相同的紀錄是因為 zsh 的處理方式,每次 cd 會在兩個紀錄文件中產生相同的 cd 命令
                    sed 's/^:([ 0-9]*):[0-9]*;(.*)/\1::::::\2/' |   #去掉歷史紀錄中不需要的字段。添加自定義的分隔符,方便下一步處理
                    awk -F"::::::" '{ $1=strftime("%Y-%m-%d %T",$1) "|"; print }'    # 將 UNIX 時間戳轉換成可以看懂的格式
        }

        #使用 histall 命令查看全部歷史紀錄
        function histall { convhistory =(allhistory) |
                    sed '/^.{20} *cd/i\' }  # 在每個 cd 命令前添加空行,判斷工作目錄比較容易
                                               # 可能會有一點不準確。因為啟動和退出時不執行 cd 命令,沒有相應的紀錄。尤其是同時運行多個 zsh  的時候
        #使用 hist 查看當前目錄歷史紀錄
        function hist { convhistory $HISTFILE }

        #全部歷史紀錄 top20
        #統計單詞出現的次數
        function top20 { allhistory | awk -F':[ 0-9]:[0-9];' '{ $1="" ; print }' |
        sed 's/ /\n/g' |    # 根據空格拆分單詞,可能不準確,比如 "\ " 之類的。但是以這類單詞出現的頻率,應該不會進入 top20
                            # 本著我不會的就是不需要的原則,不作相應的處理了
        sed '/^$/d' | sort | uniq -c | sort -nr | head -n 20 }
         

        切換目錄時輸入 cd 還是比較麻煩的,下面的腳本實現在沒有輸入任何內容的情況下按 TAB ,自動填入 "cd [TAB]"

        user-complete(){
            if [[ -n $BUFFER ]] ; then     # 如果該行有內容
                zle expand-or-complete    # 執行 TAB 原來的功能
            else                                  # 如果沒有
                BUFFER="cd "                 # 填入 cd(空格)
                zle end-of-line                # 這時光標在行首,移動到行末
                zle expand-or-complete    # 執行 TAB 原來的功能
            fi }
        zle -N user-complete
        bindkey "\t" user-complete        #將上面的功能綁定到 TAB 鍵
        有時候輸完了一個命令,才想起這個命令需要管理員權限,這時最快的步驟為: Ctrl+a s u d o (空格)[Ctrl+e] 按兩下 ESC 鍵完成上面的過程:

        sudo-command-line() {
            [[ -z $BUFFER ]] && zle up-history
            [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
        #光標移動到行末
            zle end-of-line
        }
        zle -N sudo-command-line
        #定義快捷鍵為: [Esc] [Esc]
        bindkey "\e\e" sudo-command-line

        以下配置文件供參考 WP會自動把引號轉換為成對的,可以復制這里的配置文件:

        #命令提示符 {{{
        RPROMPT=$(echo '%{33[31m%}%D %T%{33[m%}')
        PROMPT=$(echo '%{33[34m%}%M%{33[32m%}%/
        %{33[36m%}%n%{33[01;33m%} >>> %{33[m%}')
        #}}}

        #關于歷史紀錄的配置 {{{
        #歷史紀錄條目數量
        export HISTSIZE=10000
        #注銷后保存的歷史紀錄條目數量
        export SAVEHIST=10000
        #歷史紀錄文件
        #export HISTFILE=~/.zhistory
        #以附加的方式寫入歷史紀錄
        setopt INCAPPENDHISTORY
        #如果連續輸入的命令相同,歷史紀錄中只保留一個
        setopt HISTIGNOREDUPS
        #為歷史紀錄中的命令添加時間戳     
        setopt EXTENDED_HISTORY     

        #啟用 cd 命令的歷史紀錄,cd -[TAB]進入歷史路徑
        setopt AUTOPUSHD
        #相同的歷史路徑只保留一個
        setopt PUSHDIGNORE_DUPS

        #在命令前添加空格,不將此命令添加到紀錄文件中
        #setopt HISTIGNORESPACE     
        #}}}

        #每個目錄使用獨立的歷史紀錄{{{
        cd() {
            builtin cd "$@"                             # do actual cd
            fc -W                                       # write current history  file
            local HISTDIR="$HOME/.zshhistory$PWD"      # use nested folders for history
                if  [ ! -d "$HISTDIR" ] ; then          # create folder if needed
                    mkdir -p "$HISTDIR"
                fi
                export HISTFILE="$HISTDIR/zhistory"     # set new history file
            touch $HISTFILE
            local ohistsize=$HISTSIZE
                HISTSIZE=0                              # Discard previous dir's history
                HISTSIZE=$ohistsize                     # Prepare for new dir's history
            fc -R                                       #read from current histfile
        }
        mkdir -p $HOME/.zshhistory$PWD
        export HISTFILE="$HOME/.zsh_history$PWD/zhistory"

        function allhistory { cat $(find $HOME/.zsh_history -name zhistory) }
        function convhistory {
                    sort $1 | uniq |
                    sed 's/^:([ 0-9]*):[0-9]*;(.*)/\1::::::\2/' |
                    awk -F"::::::" '{ $1=strftime("%Y-%m-%d %T",$1) "|"; print }'
        }
        #使用 histall 命令查看全部歷史紀錄
        function histall { convhistory =(allhistory) |
                    sed '/^.{20} *cd/i\' }
        #使用 hist 查看當前目錄歷史紀錄
        function hist { convhistory $HISTFILE }

        #全部歷史紀錄 top44
        function top44 { allhistory | awk -F':[ 0-9]:[0-9];' '{ $1="" ; print }' | sed 's/ /\n/g' | sed '/^$/d' | sort | uniq -c | sort -nr | head -n 44 }

        #}}}

        #雜項 {{{
        #允許在交互模式中使用注釋  例如:
        #cmd #這是注釋
        setopt INTERACTIVE_COMMENTS     

        #啟用自動 cd,輸入目錄名回車進入目錄
        #稍微有點混亂,不如 cd 補全實用
        #setopt AUTO_CD

        #禁用 core dumps
        limit coredumpsize 0

        #Emacs風格 鍵綁定
        bindkey -e
        #設置 [DEL]鍵 為向后刪除
        bindkey "\e[3~" delete-char

        #以下字符視為單詞的一部分
        WORDCHARS='*?_-[]~=&;!#$%^(){}<>'
        #}}}

        #自動補全功能 {{{
        setopt AUTOLIST
        setopt AUTOMENU
        #開啟此選項,補全時會直接選中菜單項
        #setopt MENU_COMPLETE

        autoload -U compinit
        compinit

        #自動補全緩存
        #zstyle ':completion::complete:' use-cache on
        #zstyle ':completion::complete:' cache-path .zcache
        #zstyle ':completion::cd:' ignore-parents parent pwd

        #自動補全選項
        zstyle ':completion::match:' original only
        zstyle ':completion::prefix-1:' completer _complete
        zstyle ':completion:predict:' completer _complete
        zstyle ':completion:incremental:*' completer _complete _correct
        zstyle ':completion:*' completer _complete _prefix _correct _prefix _match _approximate

        #路徑補全
        zstyle ':completion:' expand 'yes'
        zstyle ':completion:' squeeze-shlashes 'yes'
        zstyle ':completion::complete:*' '\'

        zstyle ':completion:' menu select
        zstyle ':completion::*:default' force-list always

        #彩色補全菜單
        eval $(dircolors -b)
        export ZLSCOLORS="${LSCOLORS}"
        zmodload zsh/complist
        zstyle ':completion:*' list-colors ${(s.:.)LSCOLORS}
        zstyle ':completion:::kill::processes' list-colors '=(#b) #([0-9]#)=0=01;31'

        #錯誤校正     
        zstyle ':completion:' completer _complete _match _approximate
        zstyle ':completion::match:' original only
        zstyle ':completion::approximate:*' max-errors 1 numeric

        #kill 命令補全     
        compdef pkill=kill
        compdef pkill=killall
        zstyle ':completion:::kill:' menu yes select
        zstyle ':completion:::::processes' force-list always
        zstyle ':completion::processes' command 'ps -au$USER'

        #補全類型提示分組
        zstyle ':completion::matches' group 'yes'
        zstyle ':completion:' group-name ''
        zstyle ':completion::options' description 'yes'
        zstyle ':completion::options' auto-description '%d'
        zstyle ':completion::descriptions' format $'\e[01;33m -- %d --\e[0m'                  #'
        zstyle ':completion::messages' format $'\e[01;35m -- %d --\e[0m'                      #'
        zstyle ':completion:*:warnings' format $'\e[01;31m -- No Matches Found --\e[0m'        #'
        #}}}

        ##行編輯高亮模式 {{{
        # Ctrl+@ 設置標記,標記和光標點之間為 region
        zle_highlight=(region:bg=magenta #選中區域
                       special:bold      #特殊字符
                       isearch:underline)#搜索時使用的關鍵字
        #}}}

        ##空行(光標在行首)補全 cd {{{
        user-complete(){
            if [[ -n $BUFFER ]] ; then
                zle expand-or-complete
            else
                BUFFER="cd "
                zle end-of-line
                zle expand-or-complete
            fi }
        zle -N user-complete
        bindkey "\t" user-complete
        #}}}

        ##在命令前插入 sudo {{{
        #定義功能
        sudo-command-line() {
            [[ -z $BUFFER ]] && zle up-history
            [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
        #光標移動到行末
            zle end-of-line
        }
        zle -N sudo-command-line
        #定義快捷鍵為: [Esc] [Esc]
        bindkey "\e\e" sudo-command-line
        #}}}

        #命令別名 {{{
        alias cp='cp -i'
        alias mv='mv -i'
        alias rm='rm -i'
        alias ls='ls -F --color=auto'
        alias ll='ls -l'
        alias grep='grep --color=auto'
        alias ee='emacsclient -t'

        #[Esc][h] man 當前命令時,顯示簡短說明
        alias run-help >&/dev/null && unalias run-help
        autoload run-help

        #歷史命令 top10
        alias top10='print -l  ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
        #}}}

        #路徑別名 {{{
        #進入相應的路徑時只要 cd ~xxx
        hash -d WWW="/home/lighttpd/html"
        hash -d ARCH="/mnt/arch"
        hash -d PKG="/var/cache/pacman/pkg"
        hash -d E="/etc/env.d"
        hash -d C="/etc/conf.d"
        hash -d I="/etc/rc.d"
        hash -d X="/etc/X11"
        hash -d BK="/home/r00t/config_bak"
        #}}}

        ##for Emacs {{{
        #在 Emacs終端 中使用 Zsh 的一些設置 不推薦在 Emacs 中使用它
        if [[ "$TERM" == "dumb" ]]; then
        setopt No_zle
        PROMPT='%n@%M %/
        >>'
        alias ls='ls -F'
        fi
        #}}}

        ####{{{
        function timeconv { date -d @$1 +"%Y-%m-%d %T" }

        zstyle ':completion::ping:' hosts 129.27.2.3 www.tugraz.at \
               10.16.17.1{{7..9},}
        # }}}


         


        本文出自:億恩科技【www.endtimedelusion.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

      1. 您可能在找
      2. 億恩北京公司:
      3. 經營性ICP/ISP證:京B2-20150015
      4. 億恩鄭州公司:
      5. 經營性ICP/ISP/IDC證:豫B1.B2-20060070
      6. 億恩南昌公司:
      7. 經營性ICP/ISP證:贛B2-20080012
      8. 服務器/云主機 24小時售后服務電話:0371-60135900
      9. 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
      10. 專注服務器托管17年
        掃掃關注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
          0
         
         
         
         

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线