zoukankan      html  css  js  c++  java
  • 强大的zsh配置文件

    zsh比bash好用且强大多了!特别是他的自动补全功能还有自定义功能,还有自动纠错能力,命令颜色高亮等!刚接触,网上搜集了一些配置文件,分享给大家

    1.安装方法:

    sudo apt-fast install zsh

    2.配置方法:

    把下面的内容保存到记事本里面,文件名为“.zshrc”,将这个文件保存在用户目录下

    3.把zsh设为默认shell(重启后生效)

    chsh -s /bin/zsh 

    4.详细的zsh配置

    #color{{{
    autoload colors
    colors
     
    for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do
    eval _$color='%{$terminfo[bold]$fg[${(L)color}]%}'
    eval $color='%{$fg[${(L)color}]%}'
    (( count = $count + 1 ))
    done
    FINISH="%{$terminfo[sgr0]%}"
    #}}}
     
    #命令提示符
    RPROMPT=$(echo "$RED%D %T$FINISH")
    PROMPT=$(echo "$CYAN%n@$YELLOW%M:$GREEN%/$_YELLOW>$FINISH ")
     
    #PROMPT=$(echo "$BLUE%M$GREEN%/
    #
    $CYAN%n@$BLUE%M:$GREEN%/$_YELLOW>>>$FINISH ")
    #
    标题栏、任务栏样式{{{
    case $TERM in (*xterm*|*rxvt*|(dt|k|E)term)
    precmd () { print -Pn "\e]0;%n@%M//%/\a" }
    preexec () { print -Pn "\e]0;%n@%M//%/\ $1\a" }
    ;;
    esac
    #}}}
     
    #编辑器
    export EDITOR=vim
    #输入法
    export XMODIFIERS="@im=ibus"
    export QT_MODULE=ibus
    export GTK_MODULE=ibus
    #关于历史纪录的配置 {{{
    #
    历史纪录条目数量
    export HISTSIZE=10000
    #注销后保存的历史纪录条目数量
    export SAVEHIST=10000
    #历史纪录文件
    export HISTFILE=~/.zhistory
    #以附加的方式写入历史纪录
    setopt INC_APPEND_HISTORY
    #如果连续输入的命令相同,历史纪录中只保留一个
    setopt HIST_IGNORE_DUPS
    #为历史纪录中的命令添加时间戳
    setopt EXTENDED_HISTORY      
     
    #启用 cd 命令的历史纪录,cd -[TAB]进入历史路径
    setopt AUTO_PUSHD
    #相同的历史路径只保留一个
    setopt PUSHD_IGNORE_DUPS
     
    #在命令前添加空格,不将此命令添加到纪录文件中
    #
    setopt HIST_IGNORE_SPACE
    #
    }}}
     
    #每个目录使用独立的历史纪录{{{
    cd() {
    builtin cd "$@"                             # do actual cd
    fc -W                                       # write current history  file
    local HISTDIR="$HOME/.zsh_history$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/.zsh_history$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 }
     
    #全部历史纪录 top50
    function top50 { allhistory | awk -F':[ 0-9]*:[0-9]*;' '{ $1="" ; print }' | sed 's/ /\n/g' | sed '/^$/d' | sort | uniq -c | sort -nr | head -n 50 }
     
    #}}}
     
    #杂项 {{{
    #
    允许在交互模式中使用注释  例如:
    #
    cmd #这是注释
    setopt INTERACTIVE_COMMENTS      
     
    #启用自动 cd,输入目录名回车进入目录
    #
    稍微有点混乱,不如 cd 补全实用
    setopt AUTO_CD
     
    #扩展路径
    #
    /v/c/p/p => /var/cache/pacman/pkg
    setopt complete_in_word
     
    #禁用 core dumps
    limit coredumpsize 0
     
    #Emacs风格 键绑定
    bindkey -e
    #bindkey -v
    #
    设置 [DEL]键 为向后删除
    #
    bindkey "\e[3~" delete-char
     
    #以下字符视为单词的一部分
    WORDCHARS='*?_-[]~=&;!#$%^(){}<>'
    #
    }}}
     
    #自动补全功能 {{{
    setopt AUTO_LIST
    setopt AUTO_MENU
    #开启此选项,补全时会直接选中菜单项
    #
    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:*' verbose yes
    zstyle ':completion:*' menu select
    zstyle ':completion:*:*:default' force-list always
    zstyle ':completion:*' select-prompt '%SSelect:  lines: %L  matches: %M  [%p]'
     
    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:*' '\\'
     
    #彩色补全菜单
    eval $(dircolors -b)
    export ZLSCOLORS="${LS_COLORS}"
    zmodload zsh/complist
    zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
    zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
     
    #修正大小写
    zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}'
    #错误校正
    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'
    zstyle ':completion:*:corrections' format $'\e[01;32m -- %d (errors: %e) --\e[0m'
     
    # cd ~ 补全顺序
    zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'
    #}}}
     
    ##行编辑高亮模式 {{{
    #
     Ctrl+@ 设置标记,标记和光标点之间为 region
    zle_highlight=(region:bg=magenta #选中区域
    special:bold      #特殊字符
    isearch:underline)#搜索时使用的关键字
    #
    }}}
     
    ##空行(光标在行首)补全 "cd " {{{
    user-complete(){
    case $BUFFER in
    "" )                       # 空行填入 "cd "
    BUFFER="cd "
    zle end-of-line
    zle expand-or-complete
    ;;
    "cd --" )                  # "cd --" 替换为 "cd +"
    BUFFER="cd +"
    zle end-of-line
    zle expand-or-complete
    ;;
    "cd +-" )                  # "cd +-" 替换为 "cd -"
    BUFFER="cd -"
    zle end-of-line
    zle expand-or-complete
    ;;
    * )
    zle expand-or-complete
    ;;
    esac
    }
    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 -al'
    alias grep='grep --color=auto'
    alias la='ls -a'
    alias pacman='sudo pacman-color'
    alias p='sudo pacman-color'
    alias y='yaourt'
    alias h='htop'
    alias vim='sudo vim'
     
    #[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 A="/media/ayu/dearest"
    hash -d H="/media/data/backup/ayu"
    hash -d E="/etc/"
    hash -d D="/home/ayumi/Documents"
    #}}}
     
    ##for Emacs {{{
    #
    在 Emacs终端 中使用 Zsh 的一些设置 不推荐在 Emacs 中使用它
    #
    if [[ "$TERM" == "dumb" ]]; then
    #
    setopt No_zle
    #
    PROMPT='%n@%M %/
    #
    >>'
    #
    alias ls='ls -F'
    #
    fi
    #
    }}}
     
    #{{{自定义补全
    #
    补全 ping
    zstyle ':completion:*:ping:*' hosts 192.168.1.{1,50,51,100,101} www.google.com
     
    #补全 ssh scp sftp 等
    #
    zstyle -e ':completion::*:*:*:hosts' hosts 'reply=(${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) /dev/null)"}%%[# ]*}//,/ })'
    #
    }}}
     
    #{{{ F1 计算器
    arith-eval-echo() {
    LBUFFER="${LBUFFER}echo \$(( "
    RBUFFER=" ))$RBUFFER"
    }
    zle -N arith-eval-echo
    bindkey "^[[11~" arith-eval-echo
    #}}}
     
    ####{{{
    function timeconv { date -d @$1 +"%Y-%m-%d %T" }
     
    # }}}
     
    zmodload zsh/mathfunc
    autoload -U zsh-mime-setup
    zsh-mime-setup
    setopt EXTENDED_GLOB
    #autoload -U promptinit
    #
    promptinit
    #
    prompt redhat
     
    setopt correctall
    autoload compinstall
     
    #漂亮又实用的命令高亮界面
    setopt extended_glob
     TOKENS_FOLLOWED_BY_COMMANDS=('|' '||' ';' '&' '&&' 'sudo' 'do' 'time' 'strace')
     
     recolor-cmd() {
         region_highlight=()
         colorize=true
         start_pos=0
         for arg in ${(z)BUFFER}; do
             ((start_pos+=${#BUFFER[$start_pos+1,-1]}-${#${BUFFER[$start_pos+1,-1]## #}}))
             ((end_pos=$start_pos+${#arg}))
             if $colorize; then
                 colorize=false
                 res=$(LC_ALL=C builtin type $arg 2>/dev/null)
                 case $res in
                     *'reserved word'*)   style="fg=magenta,bold";;
                     *'alias for'*)       style="fg=cyan,bold";;
                     *'shell builtin'*)   style="fg=yellow,bold";;
                     *'shell function'*)  style='fg=green,bold';;
                     *"$arg is"*)
                         [[ $arg = 'sudo' ]] && style="fg=red,bold" || style="fg=blue,bold";;
                     *)                   style='none,bold';;
                 esac
                 region_highlight+=("$start_pos $end_pos $style")
             fi
             [[ ${${TOKENS_FOLLOWED_BY_COMMANDS[(r)${arg//|/\|}]}:+yes} = 'yes' ]] && colorize=true
             start_pos=$end_pos
         done
     }
    check-cmd-self-insert() { zle .self-insert && recolor-cmd }
     check-cmd-backward-delete-char() { zle .backward-delete-char && recolor-cmd }
     
     zle -N self-insert check-cmd-self-insert
     zle -N backward-delete-char check-cmd-backward-delete-char
  • 相关阅读:
    POJ 1691 Painting a Board(状态压缩DP)
    POJ 1946 Cow Cycling(抽象背包, 多阶段DP)
    Leetcode: Best Time to Buy and Sell Stock I, II
    Leetcode: Valid Palindrome
    POJ 1946 Cow Cycling
    POJ 1661 Help Jimmy(递推DP)
    POJ 1160 Post Office(区间DP)
    POJ 2486 apple tree
    Android播放器框架分析之AwesomePlaye
    【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位...
  • 原文地址:https://www.cnblogs.com/ma6174/p/2490921.html
Copyright © 2011-2022 走看看