零、效果展示

zsh.png
vim.png


目录

[TOC]


一、前言

此脚本仅在下列平台测试并成功运行:

  • Debian

    • debian-11.6[x86_64]
    • debian-11.6[aarch64]
  • CentOS

    • centos-7.9.2009[x86_64]
    • centos-8.5.2111[x86_64]
  • Ubuntu

    • ubuntu-22.04 [aarch64]
    • ubuntu-20.04 [x86_64]
    • ubuntu-20.04 [aarch64]

致mac用户:主要是为了各位macOS用户着想,下面的一键脚本中特意删除了适配macOS的部分,跟着下面的教程手动练练也好:zsh终端美化(内含一键脚本) + vimrc配置文件


本脚本只是把以前的两个脚本拼接了起来
zsh终端美化(内含一键脚本) + vimrc配置文件
主要就是美化了zshvim

二、脚本使用方法

  • 1.首先执行

    cd ~&&touch fantasy_terminal.sh&&chmod +x fantasy_terminal.sh
  • 2.然后通过

    vim fantasy_terminal.sh
    没有vim的话用vi也行

把下面的脚本复制进fantasy_terminal.sh

vim进去后,需要先:set paste,然后回车,然后点击i,然后control+v或者command+v粘贴,然后esc然后:wq然后回车,然后看下一步。
  • 3.最后直接运行就可

    bash fantasy_terminal.sh

三、 脚本内容

#!/bin/bash
set -e

function check_and_install_package_manager() {
  local package_managers=()
  if [[ "$1" == "linux-gnu"* ]]; then
    if [[ -x "$(command -v apt-get)" ]]; then
      package_managers+=("sudo apt-get update && sudo apt-get install -y apt")
    fi 
    if [[ -x "$(command -v yum)" ]]; then
      package_managers+=("sudo yum install -y yum-utils")
    fi 
    if [[ -x "$(command -v dnf)" ]]; then
      package_managers+=("sudo dnf install -y dnf-plugins-core")
    fi
    if [[ -x "$(command -v zypper)" ]]; then
      package_managers+=("sudo zypper -n install -y zypper")
    fi
  else
    echo "错误:不支持的操作系统类型。" >&2
    exit 1
  fi

  for cmd in "${package_managers[@]}"; do
    eval "$cmd"
  done
}

function no_macOS(){
  if [[ "$OSTYPE" == "darwin"* ]]; then
    echo "坦白了,适配macOS的脚本太多报错了,我搞不定,还请跟着下面的教程手动操作"
    exit 1
  fi
}

function install_package() {
  local package=$1
  if [ ! -x "$(command -v $package)" ]; then
    if [[ -x "$(command -v apt-get)" ]]; then
      sudo apt-get update && sudo apt-get install -y $package
    elif [[ -x "$(command -v yum)" ]]; then
      sudo yum install -y $package
    elif [[ -x "$(command -v dnf)" ]]; then
      sudo dnf install -y $package
    elif [[ -x "$(command -v zypper)" ]]; then
      sudo zypper -n install -y $package
    else
      echo "错误:未安装 $package 并且找不到软件包管理器。" >&2
      exit 1
    fi
  fi
}

function change_vimrc() {
    # 删除原来的.vimrc文件
    rm -f ~/.vimrc

    # 创建新的.vimrc文件,将新的配置写入其中
    cat <<EOT >> ~/.vimrc
"~/.vimrc
"vim config file
"""""""""""""""""""""""""""""""""""
"""=>全局配置<="""
"""""""""""""""""""""""""""""""""""
"关闭vi兼容模式"
set nocompatible

"设置历史记录步数"
set history=1000

"开启相关插件"
"侦测文件类型"
filetype on
"载入文件类型插件"
filetype plugin on
"为特定文件类型载入相关缩进文件"
filetype indent on

"当文件在外部被修改时,自动更新该文件"
set autoread

"激活鼠标的使用"
"set mouse=a
"set selection=exclusive
"set selectmode=mouse,key

"保存全局变量"
set viminfo+=!

"带有如下符号的单词不要被换行分割"
set iskeyword+=_,$,@,%,#,-

"通过使用: commands命令,告诉我们文件的哪一行被改变过"
set report=0

"被分割的窗口间显示空白,便于阅读"
set fillchars=vert:\ ,stl:\ ,stlnc:\\

"""""""""""""""""""""""""""""""""
"""=>字体和颜色<="""
"""""""""""""""""""""""""""""""""
"自动开启语法高亮"
syntax enable

"设置字体"
"set guifont=dejaVu\ Sans\ MONO\ 10
set guifont=Courier_New:h10:cANSI

"设置颜色"
"colorscheme desert

"高亮显示当前行"
set cursorline
hi cursorline guibg=#00ff00
hi CursorColumn guibg=#00ff00

"高亮显示普通txt文件(需要txt.vim脚本)"
au BufRead,BufNewFile *  setfiletype txt

"""""""""""""""""""""""""""""""
"""=>代码折叠功能<="""
"""""""""""""""""""""""""""""""
"激活折叠功能"
set foldenable
"set nofen(这个是关闭折叠功能)"

"设置按照语法方式折叠(可简写set fdm=XX)"
"有6种折叠方法:
"manual   手工定义折叠"
"indent   更多的缩进表示更高级别的折叠"
"expr     用表达式来定义折叠"
"syntax   用语法高亮来定义折叠"
"diff     对没有更改的文本进行折叠"
"marker   对文中的标志进行折叠"
set foldmethod=manual
"set fdl=0(这个是不选用任何折叠方法)"

"设置折叠区域的宽度"
"如果不为0,则在屏幕左侧显示一个折叠标识列
"分别用“-”和“+”来表示打开和关闭的折叠
set foldcolumn=0

"设置折叠层数为3"
setlocal foldlevel=3

"设置为自动关闭折叠"
set foldclose=all

"用空格键来代替zo和zc快捷键实现开关折叠"
"zo O-pen a fold (打开折叠)
"zc C-lose a fold (关闭折叠)
"zf F-old creation (创建折叠)

"""""""""""""""""""""""""""""""""""
"""=>文字处理<="""
"""""""""""""""""""""""""""""""""""
"使用空格来替换Tab"
set expandtab

"设置所有的Tab和缩进为4个空格"
set tabstop=4

"设定<<和>>命令移动时的宽度为4"
set shiftwidth=4

"使得按退格键时可以一次删除4个空格"
set softtabstop=4
set smarttab

"缩进,自动缩进(继承前一行的缩进)"
"set autoindent 命令打开自动缩进,是下面配置的缩写
"可使用autoindent命令的简写,即“:set ai”和“:set noai”
"还可以使用“:set ai sw=4”在一个命令中打开缩进并设置缩进级别
set ai
set cindent

"智能缩进"
set si

"自动换行”
set wrap

"设置软宽度"
set sw=4

"行内替换"
set gdefault

""""""""""""""""""""""""""""""""""
"""=>Vim 界面<="""
""""""""""""""""""""""""""""""""""
"增强模式中的命令行自动完成操作"
set wildmenu

"显示标尺"
set ruler

"设置命令行的高度"
set cmdheight=1

"显示行号"
set nu

"不要图形按钮"
set go=

"在执行宏命令时,不进行显示重绘;在宏命令执行完成后,一次性重绘,以便提高性能"
set lz

"使回格键(backspace)正常处理indent, eol, start等"
"set backspace=eol,start,indent
set backspace=2

"允许空格键和光标键跨越行边界"
"set whichwrap+=<,>,h,l

"设置魔术"
set magic

"关闭遇到错误时的声音提示"
"关闭错误信息响铃"
set noerrorbells

"关闭使用可视响铃代替呼叫"
set novisualbell

"高亮显示匹配的括号([{和}])"
set showmatch

"匹配括号高亮的时间(单位是十分之一秒)"
set mat=2

"光标移动到buffer的顶部和底部时保持3行距离"
set scrolloff=3

"搜索逐字符高亮"
set hlsearch
set incsearch

"搜索时不区分大小写"
"还可以使用简写(“:set ic”和“:set noic”)"
set ignorecase

"用浅色高亮显示当前行"
autocmd InsertLeave * se nocul
autocmd InsertEnter * se cul

"输入的命令显示出来,看的清楚"
set showcmd

""""""""""""""""""""""""""""""""""""
"""=>编码设置<="""
""""""""""""""""""""""""""""""""""""
"设置编码"
set encoding=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936

"设置文件编码"
set fileencodings=utf-8

"设置终端编码"
set termencoding=utf-8

"设置语言编码"
set langmenu=zh_CN.UTF-8
set helplang=cn

"""""""""""""""""""""""""""""
"""=>其他设置<="""
"""""""""""""""""""""""""""""
"开启新行时使用智能自动缩进"
set smartindent
set cin
set showmatch

"在处理未保存或只读文件的时候,弹出确认"
"set confirm

"隐藏工具栏"
set guioptions-=T

"隐藏菜单栏"
set guioptions-=m

"置空错误铃声的终端代码"
set vb t_vb=

"显示状态栏(默认值为1,表示无法显示状态栏)"
set laststatus=2

"状态行显示的内容"
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}

"粘贴不换行问题的解决方法"
set pastetoggle=<F9>

"设置背景颜色"
set background=dark

"文件类型自动检测,代码智能补全"
set completeopt=longest,preview,menu

"共享剪切板"
set clipboard+=unnamed

"从不备份"
set nobackup
set noswapfile

"自动保存"
"set autowrite

"显示中文帮助"
if version >= 603
        set helplang=cn
            set encoding=utf-8
endif

"设置高亮相关项"
highlight Search ctermbg=black ctermfg=white guifg=white guibg=black

""""""""""""""""""""""""""""""""
"""=>在shell脚本开头自动增加解释器以及作者等版权信息<="""
""""""""""""""""""""""""""""""""
"新建.py,.cc,.sh,.java文件,自动插入文件头"
"autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
"定义函数SetTitle,自动插入文件头"
"func SetTitle()
"    if expand ("%:e") == 'sh'
"        call setline(1, "#!/bin/bash")
"        call setline(2, "#Author:Dean")
"        call setline(3, "#Name:".expand("%"))
"        call setline(4, "#Version:V1.0")
"        call setline(5, "#Description:This is a production script.")
"    endif
"endfunc
EOT

    echo "New .vimrc file created."
}

no_macOS

#替换vimrc
change_vimrc

# 检查和安装软件包管理器
check_and_install_package_manager $OSTYPE

# 检查和安装软件包
packages=("curl" "wget" "git" "sed")
for pkg in "${packages[@]}"; do
  install_package "$pkg"
done

# 安装 zsh
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
  if command -v apt > /dev/null; then
    sudo apt update
    sudo apt -y install zsh
  elif command -v yum > /dev/null; then
    sudo yum -y install zsh
  else
    echo "不支持的 Linux 发行版"
    exit 1
  fi
else
  echo "不支持的操作系统类型"
  exit 1
fi

# 安装 oh-my-zsh
## 不管以前有没有安装过,反正先把oh-my-zsh的目录删了
rm -rf ~/.oh-my-zsh
# 下载安装脚本
wget -O install.sh https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh

# 删除与重写询问语句
sed -i '/read -r/d' install.sh
echo "ans='n'" >> install.sh
sed -i 's/exec zsh -l/\# &/' install.sh
# 添加 "-y" 选项以自动接受所有其他默认设置
sed -i '/export ZSH=/a RUNZSH="no"\nKEEP_ZSHRC="yes"\nCHSH="no"\nDISABLE_UPDATE_PROMPT="true"\nDISABLE_AUTO_UPDATE="true"\nSKIP_CHSH="yes"' install.sh

# 运行安装脚本
sh install.sh
# 清理安装脚本
rm install.sh

# 将主题改为 ys
sed -i '/^ZSH_THEME=/ s/=.*$/="ys"/' ~/.zshrc

#防止中文乱码
sed -i 's/^# export LANG=en_US.UTF-8$/export LC_ALL=en_US.UTF-8\nexport LANG=en_US.UTF-8/' ~/.zshrc

# 安装插件
sed -i -E 's/^(\s*plugins=\([^\)]*\))/plugins=(command-not-found extract docker-compose zsh-syntax-highlighting zsh-autosuggestions zsh-completions)/' ~/.zshrc

# 下载并安装 zsh 插件
mkdir -p ~/.oh-my-zsh/custom/plugins
cd ~/.oh-my-zsh/custom/plugins
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
git clone https://github.com/zsh-users/zsh-autosuggestions.git
git clone https://github.com/zsh-users/zsh-completions.git
cd ~

# 将默认 shell 改为 zsh
chsh -s $(which zsh)

echo "zsh终端美化完成!"
echo "vim美化完成!"
# 删除本脚本
rm ~/fantasy_terminal.sh

# 开一个新的Zsh Shell终端
zsh
Last modification:September 3, 2024
V50%看看实力