Linux终端配置

Ubuntu默认的终端个人感觉有点难用的,最终换成了zsh,采用ohmyzsh+powerlevel10k

ohmyzsh

参考官方wiki安装:

1
2
3
4
5
6
7
8
9
10
11
# 1.安装zsh
sudo apt install zsh
# 2.更换默认shell为zsh(更换后需要注销后重新进入shell)
chsh -s $(which zsh)
# 3.检测是否为zsh,且版本需要>=5.4.2
echo $SHELL
$SHELL --version
# 4.安装ohmyzsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # curl方式
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # wget方式
sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # fetch方式

如果github上的仓库拉取不下来,可以到国内镜像下载,方法:

  1. 从上述或 该原始github链接 下载安装脚本install.sh

  2. 修改脚本一开始的几个宏:

    1
    2
    3
    4
    5
    6
    # 注释下面两个
    # REPO=${REPO:-ohmyzsh/ohmyzsh}
    # REMOTE=${REMOTE:-https://github.com/${REPO}.git}
    # 修改为:
    REPO=${REPO:-mirrors/oh-my-zsh}
    REMOTE=${REMOTE:-https://gitee.com/${REPO}.git}
  3. 通过install.sh脚本安装ohmyzsh:

    1
    sh install.sh

插件

参考官方wiki:Plugins,需要修改默认配置文件~/.zshrc中的环境变量plugins

z

这个是oh-my-zsh默认就装好的,需要自己开启。还有一个autojump的插件和z功能差不多,autojump需要单独装

z命令根据频率和最近访问的路径来匹配命令行中给定的目录名字,支持以下参数:

  • -c:限制匹配到当前目录下的子目录
  • -e:显示最佳匹配结果,但是并不会进入
  • -h:显示简短的帮助信息
  • -l:list
  • -r:仅按排名匹配
  • -t:仅通过最近访问匹配
  • -x:从数据文件中删除当前目录
zsh-autosuggestions

官网,非常好用的一个插件,会记录你之前输入过的所有命令,并且自动匹配你可能想要输入命令,然后按键补全

安装

1
2
3
4
# github下载安装
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# gitee下载安装
git clone https://gitee.com/imirror/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

该插件可以自定义补全的快捷键,比如设置逗号补全:

1
bindkey ',' autosuggest-accept
  • .zshrc 文件添加上述代码即可修改

该插件默认的提示颜色可以更换,在 .zshrc 文件添加ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE宏即可替换想要的颜色:

1
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=6"
  • fg:背景色

  • 6:淡蓝色

    • 有点终端仅仅只支持0-7共8种背景色,需要自己尝试

    • 如果想要自己设置颜色,可以在bash中输入如下代码检测颜色:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      function clicolors() {
      i=1
      for color in {000..255}; do;
      c=$c"$FG[$color]$color$reset_color ";
      if [ `expr $i % 8` -eq 0 ]; then
      c=$c"\n"
      fi
      i=`expr $i + 1`
      done;
      echo $c | sed 's/%//g' | sed 's/{//g' | sed 's/}//g' | sed '$s/..$//';
      c=''
      }

      然后调用该函数即可:

      1
      clicolors
zsh-syntax-highlighting

官网,命令太多,有时候记不住,等输入完了才知道命令输错了,这个插件直接在输入过程中就会提示你,当前命令是否正确,错误红色,正确绿色

安装

1
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
sudo

偶尔输入某个命令,提示没有权限,需要加sudo,这个时候按两下ESC,就会在命令行头部加上sudo

colored-man-pages

自带插件,添加规则同上,给 man 手册加上颜色

extract

自带插件,通过以下extract <filename>命令可以自动解压大部分压缩文件

aliases

自带插件,支持以下两条命令:

  • acs:按组显示所有别名
  • acs <keyword>:按 <keyword> 过滤别名并突出显示。
docker

自带插件,增加自动补全和一堆docker的别名,具体可以通过aliases插件或者通过官方readme(ohmyzsh/plugins/docker)查看

  • 默认情况下,选项堆叠会失效(即出现诸如-it等选项时不会自动补全),可以通过在.zshrc中添加如下配置项来启动该功能:

    1
    2
    zstyle ':completion:*:*:docker:*' option-stacking yes
    zstyle ':completion:*:*:docker-*:*' option-stacking yes

    但是会带来相应的副作用:即使得docker run -u<tab>补全成docker run -uapprox,这是错误的

cp

自带插件,引入带rsynccpv命令,并增加以下选项:

  • -p: 保留权限
  • -o: 保留所有者
  • -g: 保留组
  • -b: 如果原文件存在的话,就对其进行备份,而不是覆盖它
  • -r: 递归目录
  • -hhh: 以人类可读的格式输出数字,以 1024 为单位(K、M、G、T)
  • --backup-dir="/tmp/rsync-$USERNAME": 将备份副本移动到“/tmp/rsync-$USERNAME”
  • -e /dev/null: 只对本地文件起作用(禁用远程shells)
  • --progress: 显示进度条
command-not-found

自带插件,如果找不到命令,此插件使用 zsh 的 command-not-found 包来提供建议安装的包

注意,该插件依赖系统对应的包:

1
2
3
4
5
6
7
# Ubuntu
sudo apt install command-not-found
# Debian
sudo apt install command-not-found
# Arch Linux
sudo pacman -Syu pkgfile
pkgfile -u # 同步数据库
colorize

自带插件。有了这个插件,你可以对超过300种支持的语言和其他文本格式的文件内容进行语法加亮

依赖(二选一即可):

  • Chroma:go编写
  • Pygments:python编写,可以通过pip安装,大多数发行版会提供python-pygments包安装

默认该插件使用Pygmentize来进行高亮,可以通过在.zshrc中修改如下变量来切换成chroma

1
ZSH_COLORIZE_TOOL=chroma

Pygments 提供多种样式。默认情况下,使用 default 样式,但您可以通过设置 ZSH_COLORIZE_STYLE 环境变量来选择其他主题:

1
ZSH_COLORIZE_STYLE="colorful"

Chroma 支持 8 色、256 色和真彩色终端输出。如果您需要从标准 8 色输出更改默认终端输出样式,请设置 ZSH_COLORIZE_CHROMA_FORMATTER 环境变量:

1
ZSH_COLORIZE_CHROMA_FORMATTER=terminal256

使用:

  • ccat <file> [files]: 对文件(或文件,如果提供了多个文件)的内容进行着色。如果没有传递文件,它将对标准输入进行着色
  • cless [less-options] <file> [files]: 对文件(或文件,如果提供了多个文件)的内容进行着色,并打开 less。如果没有文件被传递,它将对标准输入进行着色。LESSOPEN 和 LESSCLOSE 将被覆盖,但只在本地范围内起作用
dircycle

用于循环浏览目录堆栈的插件

此插件支持目录导航,类似于在浏览器或常见文件浏览器(如 Finder 或 Nautilus)上使用后退和前进。它使用了一个小 zle 技巧,让您可以使用 Ctrl + Shift + Left / Right 向左或向右循环浏览目录堆栈。这在开发环境中的目录之间来回移动时很有用,并且可以被认为是一种非破坏性的 pushd/popd。

可以通过在.zshrc中修改如下变量来修改快捷键:

1
2
3
# 绑定到快捷键 Alt + Shift + Left / Right 
bindkey '^[[1;2D' insert-cycledleft
bindkey '^[[1;2C' insert-cycledright
  • 其中'^[[1;2D''^[[1;2C'为对应快捷键 Alt + Shift + Left / Right 的快捷键序列(bindkey sequence)
  • 可以通过先按 Ctrl + V,之后再按任意快捷键的方式,获取对应快捷键的序列(bindkey sequence)
last-working-dir

追踪最后使用的工作目录,并在新的shells中自动跳转到该目录,除非起始目录不是$HOME。

添加了一个 lwd 函数来跳转到最后一个工作目录

该插件为使用 Google、Wiki、Bing、YouTube 和其他流行服务进行搜索添加了别名。能够通过以下两种形式进行搜索:

  • web_search <context> <term> [more terms if you want]
  • <context> <term> [more terms if you want]

其中context包括:

Context URL
bing https://www.bing.com/search?q=
google https://www.google.com/search?q=
yahoo https://search.yahoo.com/search?p=
ddg or duckduckgo https://www.duckduckgo.com/?q=
sp or startpage https://www.startpage.com/do/search?q=
yandex https://yandex.ru/yandsearch?text=
github https://github.com/search?q=
baidu https://www.baidu.com/s?wd=
ecosia https://www.ecosia.org/search?q=
goodreads https://www.goodreads.com/search?q=
qwant https://www.qwant.com/?q=
givero https://www.givero.com/search?q=
stackoverflow https://stackoverflow.com/search?q=
wolframalpha https://wolframalpha.com/input?i=
archive https://web.archive.org/web/*/
scholar https://scholar.google.com/scholar?q=

可以通过在.zshrc中添加如下变量来自定义搜索引擎:

1
2
3
4
ZSH_WEB_SEARCH_ENGINES=(
<context> <URL>
<context> <URL>
)

主题

参考官方wiki:Themes,需要修改默认配置文件~/.zshrc中的环境变量ZSH_THEME


powerlevel10k

powerlevel10k是一个第三方的zsh主题,支持ohmyzsh,具体安装可以参考官方README文档

  1. 安装推荐字体(可选)

    1. 官方推荐Meslo Nerd Font字体(包含Powerlevel10k可能需要的所有字形和符号,在所有主要操作系统上的数十个不同终端中经过了实际测试)
    2. 从以下链接下载(均为github,可能需要工具)并手动安装(双击即可)对应的字体文件:
    3. 针对不同的终端,配置对应的字体为MesloLGS NF
    4. 更改终端字体后需要手动运行p10k configure。旧的~/.p10k.zsh配置文件可能无法正确使用新字体。
  2. 安装powerlevel10k(仅仅针对ohmysh,其他方式详见官方readme文档)

    1. 下载主题

      1
      2
      3
      4
      # github下载安装
      git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
      # gitee下载安装
      git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
    2. 设置zsh主题,修改默认配置文件~/.zshrc,修改以下环境变量设置主题为powerlevel10k:

      1
      ZSH_THEME="powerlevel10k/powerlevel10k"
  3. 重启zsh

  4. 如果配置向导没有自动启动,输入p10k configure进行配置。