zsh 配置

setopt autocd

如果你想要避免在切换目录时一直输入乏味的cd命令(比如使用/etc而不是cd /etc)你可以设置autocd选项。


PS1

转义序列 打印效果
%T 系统时间(时:分)
%* 系统时间(时:分:秒)
%D 系统日期(年-月-日)
%n 你的用户名
%B - %b 开始到结束使用粗体打印
%U - %u 开始到结束使用下划线打印
%d 你目前的工作目录
%~ 你目前的工作目录相对于~的相对路径
%M 计算机的主机名
%m 计算机的主机名(在第一个句号之前截断)
%l 你当前的tty


zsh设置为默认sh

我们可以通过usermod命令来设置某一个给定用户的shell。


代码 4.1: 使用usermod命令永久地切换到zsh
usermod -s /bin/zsh userlogin


或者
(使用你的用户名替代”username”)
$ chsh -s /bin/zsh username


其他

setopt AUTO_CONTINUE


为了提交工作效率,可以定义一些函数或者常用的alias
f() {
echo “find . -iname "$1"”
find . -iname ”$1
}



autoload copy-earlier-word
zle -N copy-earlier-word
bindkey ‘^[,’ copy-earlier-word



setopt AUTO_PUSHD
setopt PUSHD_IGNORE_DUPS


my_accounts=(
{r00t,root}@{192.168.1.1,192.168.0.1}
kardinal@linuxtoy.org
123@211.148.131.7
)
zstyle ‘:completion:*:my-accounts’ users-hosts $my_accounts


zstyle ‘:completion:*:scp:*’ tag-order \
files users ‘hosts:-host hosts:-domain:domain hosts:-ipaddr”IP\ Address *’
zstyle ‘:completion:*:scp:*’ group-order \
files all-files users hosts-domain hosts-host hosts-ipaddr
zstyle ‘:completion:*:ssh:*’ tag-order \
users ‘hosts:-host hosts:-domain:domain hosts:-ipaddr”IP\ Address *’
zstyle ‘:completion:*:ssh:*’ group-order \
hosts-domain hosts-host users hosts-ipaddr
zstyle ‘*’ single-ignored show



hash 路径别名

hash -d blog=”/home/henryyan/work/blog/henryyan.github.com”
cd ~blog


文件关联

在图形化的文件管理器中,通常我们只要单击/双击某个文件,文件管理器就会调用相应的程序来打开该文件。
其实,这样的文件关联在 Zsh 中也可以实现。具体操作步骤如下:
添加下列内容到你的 $HOME/.zshrc 文件中:
autoload -U zsh-mime-setup
zsh-mime-setup
以关联扩展名为 png 的图像文件为例,假设要通过 pho 程序来查看,那么在 $HOME/.zshrc 中可以这样定义:
alias -s png=pho
我们以 alias 的形式来实现文件关联,其中 png 为要关联文件的扩展名,= 右边的 pho 为关联的程序。这里的 -s 必不可少。
要关联其他类型的文件,只需如法炮制即可。
为了使 .zshrc 生效,需要 source 该文件。
现在,在 Zsh 中,例如要查看 linuxtoy.png 文件,只要输入该文件名(可按 Tab 自动补完)并按回车,Zsh 便会自动调用 pho 来打开。


cd扩展

“cd ….”之类,会根据点的个数补全路径,比如 “…”补全为 “../../” ,“….”补全为 “../../..”


配合我修改的 tab 键:空行 tab 出 “cd ”,自己点点点后回车,O了



user-ret(){
    if [[ $BUFFER = "" ]] ;then
        BUFFER="ls"
        zle end-of-line
        zle accept-line
    elif [[ $BUFFER =~ "^cd\ ...+$" ]] ;then
        BUFFER=${${BUFFER//./..\/}/..\//}
        zle end-of-line
        zle accept-line
    else
        zle accept-line
    fi
}
zle -N user-ret
bindkey "\r" user-ret