Zsh (简体中文) - ArchWiki (archlinux.org)
本配置的目标是增加一些简单的功能以及一个能过得去的界面
最近安装了 grml-zsh-config ,与 Arch ISO 同步,新配置增加到文档末尾。
安装
安装zsh(本体)和zsh-completions(补全)两个包
pacman -Syu zsh zsh-completions
之后运行zsh进行首次运行配置
zsh
如果没有,则运行
autoload -Uz zsh-newuser-install
zsh-newuser-install -f
请确保Shell界面大于72*15。设置结束后就可以用zsh启动Zsh了。
可以在技术|Zsh 入门的“设置 Zsh”部分找到一些关于首次配置的帮助
将Zsh设为用户的默认Shell
Command-line shell - ArchWiki (archlinux.org)
chsh指令
chsh -s /usr/bin/zsh
对于konsole和yakuake两个终端模拟器,重新启动plasma之后就会自动换到Zsh
设置自动补全
(设置文件 ~/.zshrc 可以在第一次启动时随提示生成)
autoload -Uz compinit
compinit
如果要设置列表选择补全*,则添加:
zstyle ':completion:*' menu select
*按tab一下显示可选项,按tab两下则进入选择菜单
如果要启动别名补全,则添加:
setopt completealiases
消除历史记录重复项目与以空格开头的项目
setopt HIST_IGNORE_ALL_DUPS HIST_IGNORE_SPACE
输入目录名称自动进入
setopt AUTO_CD
后台任务立即回报
setopt NOTIFY
关闭补全错误音
setopt NO_BEEP
更多通配符
setopt EXTENDED_GLOB #将#,~,^当作通配符看待
主题设置
我对于此要求不高,只在默认安装中挑选了一个主题。
1.初始化prompt
autoload -Uz promptinit
promptinit
2.其中的fade主题我觉得可以,且可以带有参数设置(带blue参数)
prompt fade blue
可以在zsh中使用如下指令查看prompt中的可用主题及其效果
autoload -Uz promptinit; prompt -p
按键绑定
网页Keybindings • [ZshWiki]与Zsh - ArchWiki提供了一些按键绑定的例子
0.首先来说一按键代码
配置中使用terminfo解释按键,terminfo(5)与user_caps(5)两个手册页描述了所有案件的代码
普通按键除了tab直接英文找就是
按键组合分为两个部分,按键与组合键,user_caps(5)列出了特殊的按键代码,其他的在terminfo(5)这里统一以shifted xxx定义名称;组合键在按键后,以数字形式列出,具体表格见 user_caps(5)。例子:Shift+左箭头:查terminfo表得shifted left-arrow key的代码为kLFT,接着查user_caps表得Shift的代码为2,综上,得Shift+左箭头的按键代码为:kLFT2
顺带一提,为啥kLFT2在我这绑定不上……
对于tab键,这玩意不合常理。表格有三个tab,分别是set-tab,back-tab,clear-tab,这三个应该是 单独按tab 和 两个加什么组合键的tab ,目前已知back-tab是Shift+tab。
1.建立key数组,并将按键绑定入数组中
typeset -g -A key
key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
key[Up]="${terminfo[kcuu1]}"
key[Down]="${terminfo[kcud1]}"
key[Delete]="${terminfo[kdch1]}"
key[Insert]="${terminfo[kich1]}"
key[CLeft]="${terminfo[kLFT5]}"
key[CRight]="${terminfo[kRIT5]}"
以上代码将在terminfo中查询的结果赋值到key数组中,可以比较直观地看出按键与代码的对应关系,按需取用。
2.将按键与功能绑定
在绑定按键之前,有一些指令需要先使用autoload加载,并加载到zle中才能用
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
所有指令见zshzle与zshcontrib,后者中的函数可能全部需要上述步骤加载。
[[ -n "${key[Home]}" ]] && bindkey -- "${key[Home]}" beginning-of-line
[[ -n "${key[End]}" ]] && bindkey -- "${key[End]}" end-of-line
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-beginning-search
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-beginning-search
[[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char
[[ -n "${key[Insert]}" ]] && bindkey -- "${key[Insert]}" overwrite-mode
[[ -n "${key[CLeft]}" ]] && bindkey -- "${key[CLeft]}" backward-word
[[ -n "${key[CRight]}" ]] && bindkey -- "${key[CRight]}" forward-word
3.最后启动相应配置
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
autoload -Uz add-zle-hook-widget
function zle_application_mode_start { echoti smkx }
function zle_application_mode_stop { echoti rmkx }
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
fi
这些将确定Zsh运行在应用模式才启用之前的按键绑定设置,因为只有这时terminfo才能使用
与 Arch ISO 同步
最近重新配置了zsh,基于 grml-zsh-config 。基本的东西 grml 已经配置好了,我只要更改一些自己想用的就好,新配置文件很简单:
#老规矩,限制历史大小、默认清除重复,增加了一个当指令以空格开头不记录历史
HISTSIZE=2500
#不记录重复命令,不记录以空格开头的命令
setopt histignorealldups histignorespace
#extended_history 默认历史记录带时间戳,不喜欢,去掉
#share_history 即时写入历史实现多终端历史共享,不需要,去掉
unsetopt extended_history share_history
#把主题改成之前用的
prompt fade blue