欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

快速设置 Zsh:一份简洁指南

最编程 2024-02-24 08:46:31
...

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

所有指令见zshzlezshcontrib,后者中的函数可能全部需要上述步骤加载。

[[ -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 已经配置好了,我只要更改一些自己想用的就好,新配置文件很简单:

#老规矩,改历史文件、限制历史大小、默认清除重复,增加了一个当指令以空格开头不记录历史
HISTFILE=~/.bash_history
HISTSIZE=2500

#不记录重复命令,不记录以空格开头的命令
setopt histignorealldups histignorespace
#extended_history 默认历史记录带时间戳,不喜欢,去掉
#share_history 即时写入历史实现多终端历史共享,不需要,去掉
unsetopt extended_history share_history

#把主题改成之前用的
prompt fade blue